@next-vibe/checker 1.0.11 → 1.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (400) hide show
  1. package/.dist/bin/vibe-runtime.js +26 -22
  2. package/.dist/bin/vibe-runtime.js.map +5 -5
  3. package/.dist/oxlint-plugins/i18n.js +4 -0
  4. package/.dist/oxlint-plugins/i18n.js.map +1 -0
  5. package/.dist/oxlint-plugins/jsx-capitalization.js +4 -0
  6. package/.dist/oxlint-plugins/jsx-capitalization.js.map +1 -0
  7. package/.dist/oxlint-plugins/restricted-syntax.js +4 -0
  8. package/.dist/oxlint-plugins/restricted-syntax.js.map +1 -0
  9. package/check.config.ts +4 -12
  10. package/package.json +2 -9
  11. package/src/app/api/[locale]/LICENSE +674 -0
  12. package/src/app/api/[locale]/i18n/de/index.ts +13 -0
  13. package/src/app/api/[locale]/i18n/en/index.ts +12 -0
  14. package/src/app/api/[locale]/i18n/pl/index.ts +11 -0
  15. package/src/app/api/[locale]/shared/i18n/de/index.ts +85 -0
  16. package/src/app/api/[locale]/shared/i18n/en/index.ts +83 -0
  17. package/src/app/api/[locale]/shared/i18n/pl/index.ts +85 -0
  18. package/src/app/api/[locale]/shared/stats-filtering.ts +202 -0
  19. package/src/app/api/[locale]/shared/types/common.schema.ts +55 -0
  20. package/src/app/api/[locale]/shared/types/response.schema.ts +372 -0
  21. package/src/app/api/[locale]/shared/types/stats-filtering.schema.ts +375 -0
  22. package/src/app/api/[locale]/shared/types/utils.ts +190 -0
  23. package/src/app/api/[locale]/shared/utils/base64.ts +49 -0
  24. package/src/app/api/[locale]/shared/utils/env-util.ts +40 -0
  25. package/src/app/api/[locale]/shared/utils/i18n/de/index.ts +21 -0
  26. package/src/app/api/[locale]/shared/utils/i18n/en/index.ts +19 -0
  27. package/src/app/api/[locale]/shared/utils/i18n/pl/index.ts +21 -0
  28. package/src/app/api/[locale]/shared/utils/index.ts +11 -0
  29. package/src/app/api/[locale]/shared/utils/object-path.ts +41 -0
  30. package/src/app/api/[locale]/shared/utils/object.test.ts +82 -0
  31. package/src/app/api/[locale]/shared/utils/object.ts +75 -0
  32. package/src/app/api/[locale]/shared/utils/parse-error.ts +134 -0
  33. package/src/app/api/[locale]/shared/utils/parse-json.ts +70 -0
  34. package/src/app/api/[locale]/shared/utils/time.ts +53 -0
  35. package/src/app/api/[locale]/shared/utils/validation.ts +127 -0
  36. package/src/app/api/[locale]/shared/utils/zod-required-fields.ts +116 -0
  37. package/src/app/api/[locale]/system/builder/definition.ts +1942 -0
  38. package/src/app/api/[locale]/system/builder/enum.ts +78 -0
  39. package/src/app/api/[locale]/system/builder/i18n/de/index.ts +677 -0
  40. package/src/app/api/[locale]/system/builder/i18n/en/index.ts +665 -0
  41. package/src/app/api/[locale]/system/builder/i18n/pl/index.ts +668 -0
  42. package/src/app/api/[locale]/system/builder/repository/build-executor.test.ts +182 -0
  43. package/src/app/api/[locale]/system/builder/repository/build-executor.ts +583 -0
  44. package/src/app/api/[locale]/system/builder/repository/bun-compiler.ts +261 -0
  45. package/src/app/api/[locale]/system/builder/repository/bundle-analyzer.ts +197 -0
  46. package/src/app/api/[locale]/system/builder/repository/config-loader.ts +159 -0
  47. package/src/app/api/[locale]/system/builder/repository/config-validator.ts +97 -0
  48. package/src/app/api/[locale]/system/builder/repository/constants.ts +125 -0
  49. package/src/app/api/[locale]/system/builder/repository/error-suggester.ts +75 -0
  50. package/src/app/api/[locale]/system/builder/repository/file-copier.ts +98 -0
  51. package/src/app/api/[locale]/system/builder/repository/folder-cleaner.ts +80 -0
  52. package/src/app/api/[locale]/system/builder/repository/index.ts +2 -0
  53. package/src/app/api/[locale]/system/builder/repository/npm-package-generator.ts +146 -0
  54. package/src/app/api/[locale]/system/builder/repository/output-formatter.ts +104 -0
  55. package/src/app/api/[locale]/system/builder/repository/profile-service.ts +79 -0
  56. package/src/app/api/[locale]/system/builder/repository/report-generator.ts +125 -0
  57. package/src/app/api/[locale]/system/builder/repository/vite-compiler.ts +291 -0
  58. package/src/app/api/[locale]/system/builder/route.ts +21 -0
  59. package/src/app/api/[locale]/system/builder/test-files/file1.ts +2 -0
  60. package/src/app/api/[locale]/system/builder/test-files/file2.tsx +10 -0
  61. package/src/app/api/[locale]/system/builder/test-files/file3.tsx +16 -0
  62. package/src/app/api/[locale]/system/builder/test-files/folderToCopy/fileInFolder.ts +2 -0
  63. package/src/app/api/[locale]/system/builder/test-files/test-config.ts +38 -0
  64. package/src/app/api/[locale]/system/builder/test-files/test-delete-config.ts +8 -0
  65. package/src/app/api/[locale]/system/builder/test-files/test-project/package.json +24 -0
  66. package/src/app/api/[locale]/system/builder/test-files/test-project/src/constants.ts +6 -0
  67. package/src/app/api/[locale]/system/builder/test-files/test-project/src/greet.ts +18 -0
  68. package/src/app/api/[locale]/system/builder/test-files/test-project/src/index.ts +7 -0
  69. package/src/app/api/[locale]/system/builder/test-files/test-project/src/utils/calculate.ts +27 -0
  70. package/src/app/api/[locale]/system/builder/test-files/test-project/tsconfig.json +19 -0
  71. package/src/app/api/[locale]/system/builder/test-files/test-project/tsconfig.tsbuildinfo +1 -0
  72. package/src/app/api/[locale]/system/builder/test-files/test3.css +1 -0
  73. package/src/app/api/[locale]/system/check/config/repository.ts +886 -0
  74. package/src/app/api/[locale]/system/check/config/shared.ts +396 -0
  75. package/src/app/api/[locale]/system/check/config/types.ts +616 -0
  76. package/src/app/api/[locale]/system/check/config/utils.ts +171 -0
  77. package/src/app/api/[locale]/system/check/i18n/de/index.ts +15 -0
  78. package/src/app/api/[locale]/system/check/i18n/en/index.ts +14 -0
  79. package/src/app/api/[locale]/system/check/i18n/pl/index.ts +15 -0
  80. package/src/app/api/[locale]/system/check/lint/definition.ts +414 -0
  81. package/src/app/api/[locale]/system/check/lint/enum.ts +37 -0
  82. package/src/app/api/[locale]/system/check/lint/i18n/de/index.ts +164 -0
  83. package/src/app/api/[locale]/system/check/lint/i18n/en/index.ts +162 -0
  84. package/src/app/api/[locale]/system/check/lint/i18n/pl/index.ts +164 -0
  85. package/src/app/api/[locale]/system/check/lint/repository.ts +753 -0
  86. package/src/app/api/[locale]/system/check/lint/route.ts +21 -0
  87. package/src/app/api/[locale]/system/check/oxlint/README.md +190 -0
  88. package/src/app/api/[locale]/system/check/oxlint/definition.ts +414 -0
  89. package/src/app/api/[locale]/system/check/oxlint/enum.ts +37 -0
  90. package/src/app/api/[locale]/system/check/oxlint/i18n/de/index.ts +171 -0
  91. package/src/app/api/[locale]/system/check/oxlint/i18n/en/index.ts +168 -0
  92. package/src/app/api/[locale]/system/check/oxlint/i18n/pl/index.ts +172 -0
  93. package/src/app/api/[locale]/system/check/oxlint/plugins/i18n/src/index.ts +372 -0
  94. package/src/app/api/[locale]/system/check/oxlint/plugins/jsx-capitalization/README.md +246 -0
  95. package/src/app/api/[locale]/system/check/oxlint/plugins/jsx-capitalization/src/index.ts +583 -0
  96. package/src/app/api/[locale]/system/check/oxlint/plugins/restricted-syntax/src/index.ts +500 -0
  97. package/src/app/api/[locale]/system/check/oxlint/plugins/restricted-syntax/test.tsx +74 -0
  98. package/src/app/api/[locale]/system/check/oxlint/plugins/shared/config-loader.ts +305 -0
  99. package/src/app/api/[locale]/system/check/oxlint/repository.ts +959 -0
  100. package/src/app/api/[locale]/system/check/oxlint/route.ts +21 -0
  101. package/src/app/api/[locale]/system/check/oxlint/types.ts +193 -0
  102. package/src/app/api/[locale]/system/check/test-project/bun.lock +532 -0
  103. package/src/app/api/[locale]/system/check/test-project/check.config.ts +981 -0
  104. package/src/app/api/[locale]/system/check/test-project/package.json +12 -0
  105. package/src/app/api/[locale]/system/check/test-project/src/constants.ts +6 -0
  106. package/src/app/api/[locale]/system/check/test-project/src/greet.ts +18 -0
  107. package/src/app/api/[locale]/system/check/test-project/src/test-issues/a11y-issues.tsx +107 -0
  108. package/src/app/api/[locale]/system/check/test-project/src/test-issues/eslint-issues.tsx +37 -0
  109. package/src/app/api/[locale]/system/check/test-project/src/test-issues/general-issues.ts +137 -0
  110. package/src/app/api/[locale]/system/check/test-project/src/test-issues/i18n-issues.tsx +129 -0
  111. package/src/app/api/[locale]/system/check/test-project/src/test-issues/jsx-capitalization-issues.tsx +131 -0
  112. package/src/app/api/[locale]/system/check/test-project/src/test-issues/nextjs-issues.tsx +95 -0
  113. package/src/app/api/[locale]/system/check/test-project/src/test-issues/promise-issues.ts +76 -0
  114. package/src/app/api/[locale]/system/check/test-project/src/test-issues/react-issues.tsx +95 -0
  115. package/src/app/api/[locale]/system/check/test-project/src/test-issues/restricted-syntax-issues.tsx +61 -0
  116. package/src/app/api/[locale]/system/check/test-project/src/test-issues/typescript-issues.ts +80 -0
  117. package/src/app/api/[locale]/system/check/test-project/src/utils/calculate.ts +27 -0
  118. package/src/app/api/[locale]/system/check/test-project/tsconfig.json +34 -0
  119. package/src/app/api/[locale]/system/check/test-project/tsconfig.tsbuildinfo +1 -0
  120. package/src/app/api/[locale]/system/check/typecheck/definition.ts +369 -0
  121. package/src/app/api/[locale]/system/check/typecheck/enum.ts +37 -0
  122. package/src/app/api/[locale]/system/check/typecheck/i18n/de/index.ts +159 -0
  123. package/src/app/api/[locale]/system/check/typecheck/i18n/en/index.ts +150 -0
  124. package/src/app/api/[locale]/system/check/typecheck/i18n/pl/index.ts +155 -0
  125. package/src/app/api/[locale]/system/check/typecheck/repository.ts +919 -0
  126. package/src/app/api/[locale]/system/check/typecheck/route.ts +22 -0
  127. package/src/app/api/[locale]/system/check/typecheck/utils.ts +168 -0
  128. package/src/app/api/[locale]/system/check/vibe-check/definition.ts +568 -0
  129. package/src/app/api/[locale]/system/check/vibe-check/enum.ts +69 -0
  130. package/src/app/api/[locale]/system/check/vibe-check/i18n/de/index.ts +192 -0
  131. package/src/app/api/[locale]/system/check/vibe-check/i18n/en/index.ts +189 -0
  132. package/src/app/api/[locale]/system/check/vibe-check/i18n/pl/index.ts +192 -0
  133. package/src/app/api/[locale]/system/check/vibe-check/repository.ts +545 -0
  134. package/src/app/api/[locale]/system/check/vibe-check/route.test.ts +1142 -0
  135. package/src/app/api/[locale]/system/check/vibe-check/route.ts +21 -0
  136. package/src/app/api/[locale]/system/generated/endpoint.ts +313 -0
  137. package/src/app/api/[locale]/system/generated/endpoints.ts +156 -0
  138. package/src/app/api/[locale]/system/generated/route-handlers.ts +224 -0
  139. package/src/app/api/[locale]/system/generators/endpoint/definition.ts +193 -0
  140. package/src/app/api/[locale]/system/generators/endpoint/i18n/de/index.ts +48 -0
  141. package/src/app/api/[locale]/system/generators/endpoint/i18n/en/index.ts +48 -0
  142. package/src/app/api/[locale]/system/generators/endpoint/i18n/pl/index.ts +50 -0
  143. package/src/app/api/[locale]/system/generators/endpoint/repository.ts +291 -0
  144. package/src/app/api/[locale]/system/generators/endpoint/route.ts +21 -0
  145. package/src/app/api/[locale]/system/generators/endpoints/definition.ts +246 -0
  146. package/src/app/api/[locale]/system/generators/endpoints/i18n/de/index.ts +54 -0
  147. package/src/app/api/[locale]/system/generators/endpoints/i18n/en/index.ts +52 -0
  148. package/src/app/api/[locale]/system/generators/endpoints/i18n/pl/index.ts +54 -0
  149. package/src/app/api/[locale]/system/generators/endpoints/options-repository.ts +463 -0
  150. package/src/app/api/[locale]/system/generators/endpoints/repository.ts +383 -0
  151. package/src/app/api/[locale]/system/generators/endpoints/route.ts +18 -0
  152. package/src/app/api/[locale]/system/generators/endpoints-index/definition.ts +194 -0
  153. package/src/app/api/[locale]/system/generators/endpoints-index/i18n/de/index.ts +71 -0
  154. package/src/app/api/[locale]/system/generators/endpoints-index/i18n/en/index.ts +69 -0
  155. package/src/app/api/[locale]/system/generators/endpoints-index/i18n/pl/index.ts +71 -0
  156. package/src/app/api/[locale]/system/generators/endpoints-index/repository.ts +294 -0
  157. package/src/app/api/[locale]/system/generators/endpoints-index/route.ts +18 -0
  158. package/src/app/api/[locale]/system/generators/generate-all/definition.ts +355 -0
  159. package/src/app/api/[locale]/system/generators/generate-all/i18n/de/index.ts +96 -0
  160. package/src/app/api/[locale]/system/generators/generate-all/i18n/en/index.ts +94 -0
  161. package/src/app/api/[locale]/system/generators/generate-all/i18n/pl/index.ts +96 -0
  162. package/src/app/api/[locale]/system/generators/generate-all/repository.ts +257 -0
  163. package/src/app/api/[locale]/system/generators/generate-all/route.ts +20 -0
  164. package/src/app/api/[locale]/system/generators/i18n/de/index.ts +15 -0
  165. package/src/app/api/[locale]/system/generators/i18n/en/index.ts +14 -0
  166. package/src/app/api/[locale]/system/generators/i18n/pl/index.ts +15 -0
  167. package/src/app/api/[locale]/system/generators/route-handlers/definition.ts +198 -0
  168. package/src/app/api/[locale]/system/generators/route-handlers/i18n/de/index.ts +48 -0
  169. package/src/app/api/[locale]/system/generators/route-handlers/i18n/en/index.ts +48 -0
  170. package/src/app/api/[locale]/system/generators/route-handlers/i18n/pl/index.ts +50 -0
  171. package/src/app/api/[locale]/system/generators/route-handlers/repository.ts +277 -0
  172. package/src/app/api/[locale]/system/generators/route-handlers/route.ts +17 -0
  173. package/src/app/api/[locale]/system/generators/shared/utils.ts +233 -0
  174. package/src/app/api/[locale]/system/help/definition.ts +445 -0
  175. package/src/app/api/[locale]/system/help/i18n/de/index.ts +267 -0
  176. package/src/app/api/[locale]/system/help/i18n/en/index.ts +262 -0
  177. package/src/app/api/[locale]/system/help/i18n/pl/index.ts +265 -0
  178. package/src/app/api/[locale]/system/help/interactive/definition.ts +125 -0
  179. package/src/app/api/[locale]/system/help/interactive/i18n/de/index.ts +22 -0
  180. package/src/app/api/[locale]/system/help/interactive/i18n/en/index.ts +19 -0
  181. package/src/app/api/[locale]/system/help/interactive/i18n/pl/index.ts +22 -0
  182. package/src/app/api/[locale]/system/help/interactive/repository.ts +1025 -0
  183. package/src/app/api/[locale]/system/help/interactive/route.ts +53 -0
  184. package/src/app/api/[locale]/system/help/list/definition.ts +372 -0
  185. package/src/app/api/[locale]/system/help/list/repository.ts +110 -0
  186. package/src/app/api/[locale]/system/help/list/route.ts +21 -0
  187. package/src/app/api/[locale]/system/help/repository.ts +212 -0
  188. package/src/app/api/[locale]/system/help/route.ts +16 -0
  189. package/src/app/api/[locale]/system/i18n/de/index.ts +68 -0
  190. package/src/app/api/[locale]/system/i18n/en/index.ts +65 -0
  191. package/src/app/api/[locale]/system/i18n/pl/index.ts +66 -0
  192. package/src/app/api/[locale]/system/release-tool/definition.ts +3104 -0
  193. package/src/app/api/[locale]/system/release-tool/i18n/de/index.ts +813 -0
  194. package/src/app/api/[locale]/system/release-tool/i18n/en/index.ts +797 -0
  195. package/src/app/api/[locale]/system/release-tool/i18n/pl/index.ts +810 -0
  196. package/src/app/api/[locale]/system/release-tool/repository/asset-zipper.ts +128 -0
  197. package/src/app/api/[locale]/system/release-tool/repository/changelog-generator.ts +212 -0
  198. package/src/app/api/[locale]/system/release-tool/repository/ci-detector.ts +566 -0
  199. package/src/app/api/[locale]/system/release-tool/repository/config.ts +113 -0
  200. package/src/app/api/[locale]/system/release-tool/repository/constants.ts +407 -0
  201. package/src/app/api/[locale]/system/release-tool/repository/dependency-manager.ts +527 -0
  202. package/src/app/api/[locale]/system/release-tool/repository/git-service.ts +403 -0
  203. package/src/app/api/[locale]/system/release-tool/repository/hook-runner.ts +100 -0
  204. package/src/app/api/[locale]/system/release-tool/repository/index.ts +1 -0
  205. package/src/app/api/[locale]/system/release-tool/repository/notification-service.ts +638 -0
  206. package/src/app/api/[locale]/system/release-tool/repository/package-service.ts +169 -0
  207. package/src/app/api/[locale]/system/release-tool/repository/publisher.ts +253 -0
  208. package/src/app/api/[locale]/system/release-tool/repository/quality-runner.ts +428 -0
  209. package/src/app/api/[locale]/system/release-tool/repository/release-creator.ts +293 -0
  210. package/src/app/api/[locale]/system/release-tool/repository/release-executor.ts +1198 -0
  211. package/src/app/api/[locale]/system/release-tool/repository/snyk-service.ts +136 -0
  212. package/src/app/api/[locale]/system/release-tool/repository/utils.ts +642 -0
  213. package/src/app/api/[locale]/system/release-tool/repository/validation.ts +288 -0
  214. package/src/app/api/[locale]/system/release-tool/repository/version-service.ts +297 -0
  215. package/src/app/api/[locale]/system/release-tool/route.ts +21 -0
  216. package/src/app/api/[locale]/system/unified-interface/README.md +328 -0
  217. package/src/app/api/[locale]/system/unified-interface/cli/README.md +349 -0
  218. package/src/app/api/[locale]/system/unified-interface/cli/auth/cli-handler.ts +95 -0
  219. package/src/app/api/[locale]/system/unified-interface/cli/auth/cli-user.ts +146 -0
  220. package/src/app/api/[locale]/system/unified-interface/cli/auth/session-file.ts +266 -0
  221. package/src/app/api/[locale]/system/unified-interface/cli/env.ts +26 -0
  222. package/src/app/api/[locale]/system/unified-interface/cli/i18n/de/index.ts +157 -0
  223. package/src/app/api/[locale]/system/unified-interface/cli/i18n/en/index.ts +155 -0
  224. package/src/app/api/[locale]/system/unified-interface/cli/i18n/pl/index.ts +158 -0
  225. package/src/app/api/[locale]/system/unified-interface/cli/runtime/debug.ts +595 -0
  226. package/src/app/api/[locale]/system/unified-interface/cli/runtime/entry-point.ts +129 -0
  227. package/src/app/api/[locale]/system/unified-interface/cli/runtime/environment.ts +155 -0
  228. package/src/app/api/[locale]/system/unified-interface/cli/runtime/execution-errors.ts +452 -0
  229. package/src/app/api/[locale]/system/unified-interface/cli/runtime/parsing.ts +297 -0
  230. package/src/app/api/[locale]/system/unified-interface/cli/runtime/route-executor.ts +859 -0
  231. package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/de/index.ts +12 -0
  232. package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/en/index.ts +11 -0
  233. package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/pl/index.ts +12 -0
  234. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/definition.ts +262 -0
  235. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/de/index.ts +54 -0
  236. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/en/index.ts +52 -0
  237. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/pl/index.ts +54 -0
  238. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/repository.ts +421 -0
  239. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/route.ts +25 -0
  240. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/definition.ts +181 -0
  241. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/de/index.ts +61 -0
  242. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/en/index.ts +59 -0
  243. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/pl/index.ts +61 -0
  244. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/repository.ts +195 -0
  245. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/route.ts +22 -0
  246. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/definition.ts +188 -0
  247. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/de/index.ts +54 -0
  248. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/en/index.ts +52 -0
  249. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/pl/index.ts +54 -0
  250. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/repository.ts +209 -0
  251. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/route.ts +24 -0
  252. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/definition.ts +200 -0
  253. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/de/index.ts +54 -0
  254. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/en/index.ts +52 -0
  255. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/pl/index.ts +54 -0
  256. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/repository.ts +113 -0
  257. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/route.ts +22 -0
  258. package/src/app/api/[locale]/system/unified-interface/cli/vibe-runtime.ts +304 -0
  259. package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/base-renderer.ts +270 -0
  260. package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/registry.ts +309 -0
  261. package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/types.ts +126 -0
  262. package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/de/index.ts +67 -0
  263. package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/en/index.ts +65 -0
  264. package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/pl/index.ts +67 -0
  265. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/accordion.ts +74 -0
  266. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/avatar.ts +39 -0
  267. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/badge.ts +54 -0
  268. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-output.ts +298 -0
  269. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-files.ts +89 -0
  270. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-list.ts +298 -0
  271. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-summary.ts +96 -0
  272. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/container.ts +186 -0
  273. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-card.ts +65 -0
  274. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-cards.ts +570 -0
  275. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-list.ts +80 -0
  276. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-table.ts +385 -0
  277. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/editable-text.ts +99 -0
  278. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/empty-state.ts +55 -0
  279. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/errors.ts +67 -0
  280. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/grouped-list.ts +729 -0
  281. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link-card.ts +87 -0
  282. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link-list.ts +112 -0
  283. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link.ts +59 -0
  284. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/loading.ts +50 -0
  285. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/markdown.ts +131 -0
  286. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/metric.ts +291 -0
  287. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/section.ts +120 -0
  288. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/stats-grid.ts +149 -0
  289. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/tabs.ts +61 -0
  290. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/text.ts +78 -0
  291. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/title.ts +42 -0
  292. package/src/app/api/[locale]/system/unified-interface/cli/widgets/renderers/response-renderer.ts +418 -0
  293. package/src/app/api/[locale]/system/unified-interface/cli/widgets/renderers/schema-handler.ts +534 -0
  294. package/src/app/api/[locale]/system/unified-interface/i18n/de/index.ts +42 -0
  295. package/src/app/api/[locale]/system/unified-interface/i18n/en/index.ts +40 -0
  296. package/src/app/api/[locale]/system/unified-interface/i18n/pl/index.ts +43 -0
  297. package/src/app/api/[locale]/system/unified-interface/mcp/README.md +114 -0
  298. package/src/app/api/[locale]/system/unified-interface/mcp/converter.ts +146 -0
  299. package/src/app/api/[locale]/system/unified-interface/mcp/i18n/de/index.ts +182 -0
  300. package/src/app/api/[locale]/system/unified-interface/mcp/i18n/en/index.ts +179 -0
  301. package/src/app/api/[locale]/system/unified-interface/mcp/i18n/pl/index.ts +181 -0
  302. package/src/app/api/[locale]/system/unified-interface/mcp/registry.ts +343 -0
  303. package/src/app/api/[locale]/system/unified-interface/mcp/serve/definition.ts +147 -0
  304. package/src/app/api/[locale]/system/unified-interface/mcp/serve/repository.ts +38 -0
  305. package/src/app/api/[locale]/system/unified-interface/mcp/serve/route.ts +14 -0
  306. package/src/app/api/[locale]/system/unified-interface/mcp/server/protocol-handler.ts +309 -0
  307. package/src/app/api/[locale]/system/unified-interface/mcp/server/server.ts +154 -0
  308. package/src/app/api/[locale]/system/unified-interface/mcp/server/stdio-transport.ts +193 -0
  309. package/src/app/api/[locale]/system/unified-interface/mcp/types.ts +246 -0
  310. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/create-form.ts +1510 -0
  311. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/create.ts +581 -0
  312. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/endpoint-to-metadata.ts +52 -0
  313. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/loader.ts +152 -0
  314. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definitions/registry.ts +265 -0
  315. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/permissions/registry.ts +680 -0
  316. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/executor.ts +220 -0
  317. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/handler.ts +325 -0
  318. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/multi.ts +184 -0
  319. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/request-validator.ts +201 -0
  320. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/single.ts +58 -0
  321. package/src/app/api/[locale]/system/unified-interface/shared/env/define-env-client.ts +49 -0
  322. package/src/app/api/[locale]/system/unified-interface/shared/env/define-env.ts +47 -0
  323. package/src/app/api/[locale]/system/unified-interface/shared/env/validation-logger.ts +58 -0
  324. package/src/app/api/[locale]/system/unified-interface/shared/field/enum.ts +110 -0
  325. package/src/app/api/[locale]/system/unified-interface/shared/field/specialized.ts +339 -0
  326. package/src/app/api/[locale]/system/unified-interface/shared/field/utils.test.ts +408 -0
  327. package/src/app/api/[locale]/system/unified-interface/shared/field/utils.ts +1349 -0
  328. package/src/app/api/[locale]/system/unified-interface/shared/field-config/endpoint-field-types.ts +107 -0
  329. package/src/app/api/[locale]/system/unified-interface/shared/field-config/field-config-types.ts +268 -0
  330. package/src/app/api/[locale]/system/unified-interface/shared/logger/colors.ts +114 -0
  331. package/src/app/api/[locale]/system/unified-interface/shared/logger/endpoint.ts +169 -0
  332. package/src/app/api/[locale]/system/unified-interface/shared/logger/file-logger.ts +88 -0
  333. package/src/app/api/[locale]/system/unified-interface/shared/logger/formatters.ts +177 -0
  334. package/src/app/api/[locale]/system/unified-interface/shared/server-only/auth/base-auth-handler.ts +82 -0
  335. package/src/app/api/[locale]/system/unified-interface/shared/server-only/auth/factory.ts +33 -0
  336. package/src/app/api/[locale]/system/unified-interface/shared/server-only/server-only.ts +4 -0
  337. package/src/app/api/[locale]/system/unified-interface/shared/types/actions.ts +289 -0
  338. package/src/app/api/[locale]/system/unified-interface/shared/types/endpoint.ts +1167 -0
  339. package/src/app/api/[locale]/system/unified-interface/shared/types/enums.ts +382 -0
  340. package/src/app/api/[locale]/system/unified-interface/shared/types/platform.ts +34 -0
  341. package/src/app/api/[locale]/system/unified-interface/shared/types/types.ts +80 -0
  342. package/src/app/api/[locale]/system/unified-interface/shared/types/ui-config.ts +76 -0
  343. package/src/app/api/[locale]/system/unified-interface/shared/utils/error-types.ts +27 -0
  344. package/src/app/api/[locale]/system/unified-interface/shared/utils/path.ts +63 -0
  345. package/src/app/api/[locale]/system/unified-interface/shared/utils/scanner.ts +241 -0
  346. package/src/app/api/[locale]/system/unified-interface/shared/widgets/actions.ts +256 -0
  347. package/src/app/api/[locale]/system/unified-interface/shared/widgets/configs.ts +1158 -0
  348. package/src/app/api/[locale]/system/unified-interface/shared/widgets/helpers.ts +80 -0
  349. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/accordion.ts +82 -0
  350. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/avatar.ts +75 -0
  351. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/badge.ts +89 -0
  352. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/code-output.ts +302 -0
  353. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/code-quality-list.ts +202 -0
  354. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/container.ts +129 -0
  355. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-card.ts +81 -0
  356. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-cards.ts +258 -0
  357. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-list.ts +123 -0
  358. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-table.ts +387 -0
  359. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/editable-text.ts +89 -0
  360. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/empty-state.ts +78 -0
  361. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/errors.ts +93 -0
  362. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/grouped-list.ts +448 -0
  363. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/index.ts +38 -0
  364. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link-card.ts +130 -0
  365. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link-list.ts +127 -0
  366. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link.ts +68 -0
  367. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/loading.ts +81 -0
  368. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/markdown.ts +176 -0
  369. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/metric-card.ts +241 -0
  370. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/section.ts +90 -0
  371. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/stats-grid.ts +71 -0
  372. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/tabs.ts +80 -0
  373. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/text.ts +105 -0
  374. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/title.ts +72 -0
  375. package/src/app/api/[locale]/system/unified-interface/shared/widgets/types.ts +240 -0
  376. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/field-helpers.ts +137 -0
  377. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/formatting.ts +437 -0
  378. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/url.ts +40 -0
  379. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/widget-helpers.ts +465 -0
  380. package/src/app/api/[locale]/user/auth/enum.ts +16 -0
  381. package/src/app/api/[locale]/user/auth/i18n/de/index.ts +227 -0
  382. package/src/app/api/[locale]/user/auth/i18n/en/index.ts +205 -0
  383. package/src/app/api/[locale]/user/auth/i18n/pl/index.ts +219 -0
  384. package/src/app/api/[locale]/user/auth/types.ts +110 -0
  385. package/src/app/api/[locale]/user/enum.ts +64 -0
  386. package/src/app/api/[locale]/user/private/i18n/de/index.ts +3 -0
  387. package/src/app/api/[locale]/user/private/i18n/en/index.ts +1 -0
  388. package/src/app/api/[locale]/user/private/i18n/pl/index.ts +3 -0
  389. package/src/app/api/[locale]/user/types.ts +118 -0
  390. package/src/app/api/[locale]/user/user-roles/enum.ts +112 -0
  391. package/src/app/api/[locale]/user/user-roles/i18n/de/index.ts +85 -0
  392. package/src/app/api/[locale]/user/user-roles/i18n/en/index.ts +83 -0
  393. package/src/app/api/[locale]/user/user-roles/i18n/pl/index.ts +86 -0
  394. package/src/app/api/[locale]/user/user-roles/types.ts +34 -0
  395. package/src/app/api/i18n/de/index.ts +6 -0
  396. package/src/app/api/i18n/en/index.ts +5 -0
  397. package/src/app/api/i18n/pl/index.ts +5 -0
  398. package/src/app/i18n/de/index.ts +6 -0
  399. package/src/app/i18n/en/index.ts +5 -0
  400. package/src/app/i18n/pl/index.ts +5 -0
@@ -0,0 +1,3104 @@
1
+ /**
2
+ * Release Tool Endpoint Definition
3
+ * Single source of truth for all release tool types and configuration
4
+ *
5
+ * Supports:
6
+ * - Local development releases with interactive prompts
7
+ * - CI/CD pipeline releases (GitHub Actions, GitLab CI, etc.)
8
+ * - Monorepo and multi-package releases
9
+ * - NPM, JSR, and GitHub/GitLab releases
10
+ * - Version bumping (semver + prereleases)
11
+ * - Changelog generation
12
+ * - Asset zipping and uploading
13
+ */
14
+
15
+ import { z } from "zod";
16
+
17
+ import { createEndpoint } from "@/app/api/[locale]/system/unified-interface/shared/endpoints/definition/create";
18
+ import {
19
+ objectField,
20
+ objectOptionalField,
21
+ requestDataArrayOptionalField,
22
+ requestDataField,
23
+ responseArrayOptionalField,
24
+ responseField,
25
+ } from "@/app/api/[locale]/system/unified-interface/shared/field/utils";
26
+ import {
27
+ EndpointErrorTypes,
28
+ FieldDataType,
29
+ LayoutType,
30
+ Methods,
31
+ WidgetType,
32
+ } from "@/app/api/[locale]/system/unified-interface/shared/types/enums";
33
+ import { UserRole } from "@/app/api/[locale]/user/user-roles/enum";
34
+
35
+ // ============================================================================
36
+ // Shared Enums/Schemas (minimal - used only for select options)
37
+ // ============================================================================
38
+
39
+ /** Package manager options */
40
+ const PackageManagerSchema = z.enum(["npm", "yarn", "pnpm", "deno", "bun"]);
41
+
42
+ /** Version increment types */
43
+ const VersionIncrementSchema = z.enum([
44
+ "patch",
45
+ "minor",
46
+ "major",
47
+ "prepatch",
48
+ "preminor",
49
+ "premajor",
50
+ "prerelease",
51
+ ]);
52
+
53
+ /** NPM access levels */
54
+ const NpmAccessSchema = z.enum(["public", "restricted"]);
55
+
56
+ /** Webhook notification types */
57
+ const WebhookTypeSchema = z.enum(["slack", "discord", "teams", "custom"]);
58
+
59
+ /** Changelog presets */
60
+ const ChangelogPresetSchema = z.enum([
61
+ "conventional-commits",
62
+ "angular",
63
+ "atom",
64
+ "eslint",
65
+ "ember",
66
+ ]);
67
+
68
+ /** CI providers */
69
+ const CIProviderSchema = z.enum([
70
+ "github",
71
+ "gitlab",
72
+ "jenkins",
73
+ "circleci",
74
+ "travis",
75
+ "azure",
76
+ "bitbucket",
77
+ "drone",
78
+ "buildkite",
79
+ "woodpecker",
80
+ "teamcity",
81
+ "codeship",
82
+ "appveyor",
83
+ "codebuild",
84
+ "cloudbuild",
85
+ "semaphore",
86
+ "buddy",
87
+ "render",
88
+ "vercel",
89
+ "netlify",
90
+ "unknown",
91
+ ]);
92
+
93
+ /** Package status */
94
+ const PackageStatusSchema = z.enum(["success", "skipped", "failed"]);
95
+
96
+ // ============================================================================
97
+ // Endpoint Definition
98
+ // ============================================================================
99
+
100
+ const { POST } = createEndpoint({
101
+ method: Methods.POST,
102
+ path: ["system", "release-tool"],
103
+ title: "app.api.system.releaseTool.title",
104
+ description: "app.api.system.releaseTool.description",
105
+ category: "app.api.system.releaseTool.category",
106
+ tags: ["app.api.system.releaseTool.tags.release"],
107
+ icon: "rocket",
108
+ allowedRoles: [
109
+ UserRole.ADMIN,
110
+ UserRole.AI_TOOL_OFF,
111
+ UserRole.MCP_OFF,
112
+ UserRole.WEB_OFF,
113
+ UserRole.CLI_AUTH_BYPASS,
114
+ ],
115
+ aliases: ["release", "pub", "publish"],
116
+
117
+ fields: objectField(
118
+ {
119
+ type: WidgetType.CONTAINER,
120
+ title: "app.api.system.releaseTool.form.title",
121
+ description: "app.api.system.releaseTool.form.description",
122
+ layoutType: LayoutType.GRID,
123
+ columns: 12,
124
+ },
125
+ { request: "data", response: true },
126
+ {
127
+ // ========================================================================
128
+ // REQUEST FIELDS - Runtime options at root level for CLI access
129
+ // ========================================================================
130
+
131
+ configPath: requestDataField(
132
+ {
133
+ type: WidgetType.FORM_FIELD,
134
+ fieldType: FieldDataType.TEXT,
135
+ label: "app.api.system.releaseTool.fields.configPath.title",
136
+ description:
137
+ "app.api.system.releaseTool.fields.configPath.description",
138
+ },
139
+ z.string().optional().default("release.config.ts"),
140
+ ),
141
+
142
+ // ========================================================================
143
+ // Runtime options (CLI flags) - at root level for direct CLI access
144
+ // ========================================================================
145
+ ci: requestDataField(
146
+ {
147
+ type: WidgetType.FORM_FIELD,
148
+ fieldType: FieldDataType.BOOLEAN,
149
+ label: "app.api.system.releaseTool.fields.ci.title",
150
+ description: "app.api.system.releaseTool.fields.ci.description",
151
+ },
152
+ z.boolean().optional().default(false),
153
+ ),
154
+
155
+ dryRun: requestDataField(
156
+ {
157
+ type: WidgetType.FORM_FIELD,
158
+ fieldType: FieldDataType.BOOLEAN,
159
+ label: "app.api.system.releaseTool.fields.dryRun.title",
160
+ description: "app.api.system.releaseTool.fields.dryRun.description",
161
+ },
162
+ z.boolean().optional().default(false),
163
+ ),
164
+
165
+ verbose: requestDataField(
166
+ {
167
+ type: WidgetType.FORM_FIELD,
168
+ fieldType: FieldDataType.BOOLEAN,
169
+ label: "app.api.system.releaseTool.fields.verbose.title",
170
+ description: "app.api.system.releaseTool.fields.verbose.description",
171
+ },
172
+ z.boolean().optional().default(false),
173
+ ),
174
+
175
+ forceUpdate: requestDataField(
176
+ {
177
+ type: WidgetType.FORM_FIELD,
178
+ fieldType: FieldDataType.BOOLEAN,
179
+ label: "app.api.system.releaseTool.fields.forceUpdate.title",
180
+ description:
181
+ "app.api.system.releaseTool.fields.forceUpdate.description",
182
+ },
183
+ z.boolean().optional(), // No default - undefined means "ask user"
184
+ ),
185
+
186
+ // Skip options
187
+ skipLint: requestDataField(
188
+ {
189
+ type: WidgetType.FORM_FIELD,
190
+ fieldType: FieldDataType.BOOLEAN,
191
+ label: "app.api.system.releaseTool.fields.skipLint.title",
192
+ description: "app.api.system.releaseTool.fields.skipLint.description",
193
+ },
194
+ z.boolean().optional().default(false),
195
+ ),
196
+
197
+ skipTypecheck: requestDataField(
198
+ {
199
+ type: WidgetType.FORM_FIELD,
200
+ fieldType: FieldDataType.BOOLEAN,
201
+ label: "app.api.system.releaseTool.fields.skipTypecheck.title",
202
+ description:
203
+ "app.api.system.releaseTool.fields.skipTypecheck.description",
204
+ },
205
+ z.boolean().optional().default(false),
206
+ ),
207
+
208
+ skipBuild: requestDataField(
209
+ {
210
+ type: WidgetType.FORM_FIELD,
211
+ fieldType: FieldDataType.BOOLEAN,
212
+ label: "app.api.system.releaseTool.fields.skipBuild.title",
213
+ description:
214
+ "app.api.system.releaseTool.fields.skipBuild.description",
215
+ },
216
+ z.boolean().optional().default(false),
217
+ ),
218
+
219
+ skipTests: requestDataField(
220
+ {
221
+ type: WidgetType.FORM_FIELD,
222
+ fieldType: FieldDataType.BOOLEAN,
223
+ label: "app.api.system.releaseTool.fields.skipTests.title",
224
+ description:
225
+ "app.api.system.releaseTool.fields.skipTests.description",
226
+ },
227
+ z.boolean().optional().default(false),
228
+ ),
229
+
230
+ skipSnyk: requestDataField(
231
+ {
232
+ type: WidgetType.FORM_FIELD,
233
+ fieldType: FieldDataType.BOOLEAN,
234
+ label: "app.api.system.releaseTool.fields.skipSnyk.title",
235
+ description: "app.api.system.releaseTool.fields.skipSnyk.description",
236
+ },
237
+ z.boolean().optional().default(false),
238
+ ),
239
+
240
+ skipPublish: requestDataField(
241
+ {
242
+ type: WidgetType.FORM_FIELD,
243
+ fieldType: FieldDataType.BOOLEAN,
244
+ label: "app.api.system.releaseTool.fields.skipPublish.title",
245
+ description:
246
+ "app.api.system.releaseTool.fields.skipPublish.description",
247
+ },
248
+ z.boolean().optional().default(false),
249
+ ),
250
+
251
+ skipChangelog: requestDataField(
252
+ {
253
+ type: WidgetType.FORM_FIELD,
254
+ fieldType: FieldDataType.BOOLEAN,
255
+ label: "app.api.system.releaseTool.fields.skipChangelog.title",
256
+ description:
257
+ "app.api.system.releaseTool.fields.skipChangelog.description",
258
+ },
259
+ z.boolean().optional().default(false),
260
+ ),
261
+
262
+ skipGitTag: requestDataField(
263
+ {
264
+ type: WidgetType.FORM_FIELD,
265
+ fieldType: FieldDataType.BOOLEAN,
266
+ label: "app.api.system.releaseTool.fields.skipGitTag.title",
267
+ description:
268
+ "app.api.system.releaseTool.fields.skipGitTag.description",
269
+ },
270
+ z.boolean().optional().default(false),
271
+ ),
272
+
273
+ skipGitPush: requestDataField(
274
+ {
275
+ type: WidgetType.FORM_FIELD,
276
+ fieldType: FieldDataType.BOOLEAN,
277
+ label: "app.api.system.releaseTool.fields.skipGitPush.title",
278
+ description:
279
+ "app.api.system.releaseTool.fields.skipGitPush.description",
280
+ },
281
+ z.boolean().optional().default(false),
282
+ ),
283
+
284
+ skipInstall: requestDataField(
285
+ {
286
+ type: WidgetType.FORM_FIELD,
287
+ fieldType: FieldDataType.BOOLEAN,
288
+ label: "app.api.system.releaseTool.fields.skipInstall.title",
289
+ description:
290
+ "app.api.system.releaseTool.fields.skipInstall.description",
291
+ },
292
+ z.boolean().optional().default(false),
293
+ ),
294
+
295
+ skipClean: requestDataField(
296
+ {
297
+ type: WidgetType.FORM_FIELD,
298
+ fieldType: FieldDataType.BOOLEAN,
299
+ label: "app.api.system.releaseTool.fields.skipClean.title",
300
+ description:
301
+ "app.api.system.releaseTool.fields.skipClean.description",
302
+ },
303
+ z.boolean().optional().default(false),
304
+ ),
305
+
306
+ // Version options
307
+ versionIncrement: requestDataField(
308
+ {
309
+ type: WidgetType.FORM_FIELD,
310
+ fieldType: FieldDataType.SELECT,
311
+ label: "app.api.system.releaseTool.fields.versionIncrement.title",
312
+ description:
313
+ "app.api.system.releaseTool.fields.versionIncrement.description",
314
+ options: [
315
+ {
316
+ value: "patch",
317
+ label: "app.api.system.releaseTool.enums.versionIncrement.patch",
318
+ },
319
+ {
320
+ value: "minor",
321
+ label: "app.api.system.releaseTool.enums.versionIncrement.minor",
322
+ },
323
+ {
324
+ value: "major",
325
+ label: "app.api.system.releaseTool.enums.versionIncrement.major",
326
+ },
327
+ {
328
+ value: "prepatch",
329
+ label:
330
+ "app.api.system.releaseTool.enums.versionIncrement.prepatch",
331
+ },
332
+ {
333
+ value: "preminor",
334
+ label:
335
+ "app.api.system.releaseTool.enums.versionIncrement.preminor",
336
+ },
337
+ {
338
+ value: "premajor",
339
+ label:
340
+ "app.api.system.releaseTool.enums.versionIncrement.premajor",
341
+ },
342
+ {
343
+ value: "prerelease",
344
+ label:
345
+ "app.api.system.releaseTool.enums.versionIncrement.prerelease",
346
+ },
347
+ ],
348
+ optional: true,
349
+ },
350
+ VersionIncrementSchema.optional(),
351
+ ),
352
+
353
+ prereleaseId: requestDataField(
354
+ {
355
+ type: WidgetType.FORM_FIELD,
356
+ fieldType: FieldDataType.TEXT,
357
+ label: "app.api.system.releaseTool.fields.prereleaseId.title",
358
+ description:
359
+ "app.api.system.releaseTool.fields.prereleaseId.description",
360
+ optional: true,
361
+ },
362
+ z.string().optional(),
363
+ ),
364
+
365
+ targetPackage: requestDataField(
366
+ {
367
+ type: WidgetType.FORM_FIELD,
368
+ fieldType: FieldDataType.TEXT,
369
+ label: "app.api.system.releaseTool.fields.targetPackage.title",
370
+ description:
371
+ "app.api.system.releaseTool.fields.targetPackage.description",
372
+ optional: true,
373
+ },
374
+ z.string().optional(),
375
+ ),
376
+
377
+ commitMessage: requestDataField(
378
+ {
379
+ type: WidgetType.FORM_FIELD,
380
+ fieldType: FieldDataType.TEXT,
381
+ label: "app.api.system.releaseTool.fields.commitMessage.title",
382
+ description:
383
+ "app.api.system.releaseTool.fields.commitMessage.description",
384
+ optional: true,
385
+ },
386
+ z.string().optional(),
387
+ ),
388
+
389
+ notifyWebhook: requestDataField(
390
+ {
391
+ type: WidgetType.FORM_FIELD,
392
+ fieldType: FieldDataType.TEXT,
393
+ label: "app.api.system.releaseTool.fields.notifyWebhook.title",
394
+ description:
395
+ "app.api.system.releaseTool.fields.notifyWebhook.description",
396
+ optional: true,
397
+ },
398
+ z.string().optional(),
399
+ ),
400
+
401
+ // ========================================================================
402
+ // CONFIG OBJECT - Contains release configuration (not runtime flags)
403
+ // ========================================================================
404
+ configObject: objectOptionalField(
405
+ {
406
+ type: WidgetType.CONTAINER,
407
+ title: "app.api.system.releaseTool.fields.configObject.title",
408
+ description:
409
+ "app.api.system.releaseTool.fields.configObject.description",
410
+ layoutType: LayoutType.GRID,
411
+ columns: 12,
412
+ optional: true,
413
+ },
414
+ { request: "data" },
415
+ {
416
+ packageManager: requestDataField(
417
+ {
418
+ type: WidgetType.FORM_FIELD,
419
+ fieldType: FieldDataType.SELECT,
420
+ label: "app.api.system.releaseTool.fields.packageManager.title",
421
+ description:
422
+ "app.api.system.releaseTool.fields.packageManager.description",
423
+ options: [
424
+ {
425
+ value: "bun",
426
+ label: "app.api.system.releaseTool.enums.packageManager.bun",
427
+ },
428
+ {
429
+ value: "npm",
430
+ label: "app.api.system.releaseTool.enums.packageManager.npm",
431
+ },
432
+ {
433
+ value: "yarn",
434
+ label: "app.api.system.releaseTool.enums.packageManager.yarn",
435
+ },
436
+ {
437
+ value: "pnpm",
438
+ label: "app.api.system.releaseTool.enums.packageManager.pnpm",
439
+ },
440
+ {
441
+ value: "deno",
442
+ label: "app.api.system.releaseTool.enums.packageManager.deno",
443
+ },
444
+ ],
445
+ },
446
+ PackageManagerSchema.optional().default("bun"),
447
+ ),
448
+
449
+ globalVersion: requestDataField(
450
+ {
451
+ type: WidgetType.FORM_FIELD,
452
+ fieldType: FieldDataType.TEXT,
453
+ label: "app.api.system.releaseTool.fields.globalVersion.title",
454
+ description:
455
+ "app.api.system.releaseTool.fields.globalVersion.description",
456
+ optional: true,
457
+ },
458
+ z.string().optional(),
459
+ ),
460
+
461
+ parallel: requestDataField(
462
+ {
463
+ type: WidgetType.FORM_FIELD,
464
+ fieldType: FieldDataType.BOOLEAN,
465
+ label: "app.api.system.releaseTool.fields.parallel.title",
466
+ description:
467
+ "app.api.system.releaseTool.fields.parallel.description",
468
+ optional: true,
469
+ },
470
+ z.boolean().optional(),
471
+ ),
472
+
473
+ maxParallelJobs: requestDataField(
474
+ {
475
+ type: WidgetType.FORM_FIELD,
476
+ fieldType: FieldDataType.NUMBER,
477
+ label: "app.api.system.releaseTool.fields.maxParallelJobs.title",
478
+ description:
479
+ "app.api.system.releaseTool.fields.maxParallelJobs.description",
480
+ optional: true,
481
+ },
482
+ z.coerce.number().optional(),
483
+ ),
484
+
485
+ continueOnError: requestDataField(
486
+ {
487
+ type: WidgetType.FORM_FIELD,
488
+ fieldType: FieldDataType.BOOLEAN,
489
+ label: "app.api.system.releaseTool.fields.continueOnError.title",
490
+ description:
491
+ "app.api.system.releaseTool.fields.continueOnError.description",
492
+ optional: true,
493
+ },
494
+ z.boolean().optional(),
495
+ ),
496
+
497
+ verifyGitStatus: requestDataField(
498
+ {
499
+ type: WidgetType.FORM_FIELD,
500
+ fieldType: FieldDataType.BOOLEAN,
501
+ label: "app.api.system.releaseTool.fields.verifyGitStatus.title",
502
+ description:
503
+ "app.api.system.releaseTool.fields.verifyGitStatus.description",
504
+ optional: true,
505
+ },
506
+ z.boolean().optional(),
507
+ ),
508
+
509
+ requireCleanWorkingDir: requestDataField(
510
+ {
511
+ type: WidgetType.FORM_FIELD,
512
+ fieldType: FieldDataType.BOOLEAN,
513
+ label:
514
+ "app.api.system.releaseTool.fields.requireCleanWorkingDir.title",
515
+ description:
516
+ "app.api.system.releaseTool.fields.requireCleanWorkingDir.description",
517
+ optional: true,
518
+ },
519
+ z.boolean().optional(),
520
+ ),
521
+
522
+ verifyLockfile: requestDataField(
523
+ {
524
+ type: WidgetType.FORM_FIELD,
525
+ fieldType: FieldDataType.BOOLEAN,
526
+ label: "app.api.system.releaseTool.fields.verifyLockfile.title",
527
+ description:
528
+ "app.api.system.releaseTool.fields.verifyLockfile.description",
529
+ optional: true,
530
+ },
531
+ z.boolean().optional(),
532
+ ),
533
+
534
+ // Branch configuration
535
+ branch: objectOptionalField(
536
+ {
537
+ type: WidgetType.CONTAINER,
538
+ title: "app.api.system.releaseTool.fields.branch.title",
539
+ description:
540
+ "app.api.system.releaseTool.fields.branch.description",
541
+ layoutType: LayoutType.GRID,
542
+ columns: 12,
543
+ optional: true,
544
+ },
545
+ { request: "data" },
546
+ {
547
+ main: requestDataField(
548
+ {
549
+ type: WidgetType.FORM_FIELD,
550
+ fieldType: FieldDataType.TEXT,
551
+ label: "app.api.system.releaseTool.fields.branchMain.title",
552
+ },
553
+ z.string().optional().default("main"),
554
+ ),
555
+ develop: requestDataField(
556
+ {
557
+ type: WidgetType.FORM_FIELD,
558
+ fieldType: FieldDataType.TEXT,
559
+ label:
560
+ "app.api.system.releaseTool.fields.branchDevelop.title",
561
+ optional: true,
562
+ },
563
+ z.string().optional(),
564
+ ),
565
+ allowNonMain: requestDataField(
566
+ {
567
+ type: WidgetType.FORM_FIELD,
568
+ fieldType: FieldDataType.BOOLEAN,
569
+ label: "app.api.system.releaseTool.fields.allowNonMain.title",
570
+ },
571
+ z.boolean().optional().default(false),
572
+ ),
573
+ protected: requestDataField(
574
+ {
575
+ type: WidgetType.FORM_FIELD,
576
+ fieldType: FieldDataType.TEXT,
577
+ label:
578
+ "app.api.system.releaseTool.fields.protectedBranches.title",
579
+ optional: true,
580
+ },
581
+ z.array(z.string()).optional(),
582
+ ),
583
+ },
584
+ ),
585
+
586
+ // Notifications configuration
587
+ notifications: objectOptionalField(
588
+ {
589
+ type: WidgetType.CONTAINER,
590
+ title: "app.api.system.releaseTool.fields.notifications.title",
591
+ description:
592
+ "app.api.system.releaseTool.fields.notifications.description",
593
+ layoutType: LayoutType.GRID,
594
+ columns: 12,
595
+ optional: true,
596
+ },
597
+ { request: "data" },
598
+ {
599
+ enabled: requestDataField(
600
+ {
601
+ type: WidgetType.FORM_FIELD,
602
+ fieldType: FieldDataType.BOOLEAN,
603
+ label:
604
+ "app.api.system.releaseTool.fields.notificationsEnabled.title",
605
+ },
606
+ z.boolean().optional().default(false),
607
+ ),
608
+ webhookUrl: requestDataField(
609
+ {
610
+ type: WidgetType.FORM_FIELD,
611
+ fieldType: FieldDataType.TEXT,
612
+ label: "app.api.system.releaseTool.fields.webhookUrl.title",
613
+ optional: true,
614
+ },
615
+ z.string().optional(),
616
+ ),
617
+ type: requestDataField(
618
+ {
619
+ type: WidgetType.FORM_FIELD,
620
+ fieldType: FieldDataType.SELECT,
621
+ label: "app.api.system.releaseTool.fields.webhookType.title",
622
+ options: [
623
+ {
624
+ value: "slack",
625
+ label:
626
+ "app.api.system.releaseTool.enums.webhookType.slack",
627
+ },
628
+ {
629
+ value: "discord",
630
+ label:
631
+ "app.api.system.releaseTool.enums.webhookType.discord",
632
+ },
633
+ {
634
+ value: "teams",
635
+ label:
636
+ "app.api.system.releaseTool.enums.webhookType.teams",
637
+ },
638
+ {
639
+ value: "custom",
640
+ label:
641
+ "app.api.system.releaseTool.enums.webhookType.custom",
642
+ },
643
+ ],
644
+ optional: true,
645
+ },
646
+ WebhookTypeSchema.optional(),
647
+ ),
648
+ onSuccess: requestDataField(
649
+ {
650
+ type: WidgetType.FORM_FIELD,
651
+ fieldType: FieldDataType.BOOLEAN,
652
+ label: "app.api.system.releaseTool.fields.onSuccess.title",
653
+ },
654
+ z.boolean().optional().default(true),
655
+ ),
656
+ onFailure: requestDataField(
657
+ {
658
+ type: WidgetType.FORM_FIELD,
659
+ fieldType: FieldDataType.BOOLEAN,
660
+ label: "app.api.system.releaseTool.fields.onFailure.title",
661
+ },
662
+ z.boolean().optional().default(true),
663
+ ),
664
+ messageTemplate: requestDataField(
665
+ {
666
+ type: WidgetType.FORM_FIELD,
667
+ fieldType: FieldDataType.TEXT,
668
+ label:
669
+ "app.api.system.releaseTool.fields.messageTemplate.title",
670
+ optional: true,
671
+ },
672
+ z.string().optional(),
673
+ ),
674
+ includeTimings: requestDataField(
675
+ {
676
+ type: WidgetType.FORM_FIELD,
677
+ fieldType: FieldDataType.BOOLEAN,
678
+ label:
679
+ "app.api.system.releaseTool.fields.includeTimings.title",
680
+ optional: true,
681
+ },
682
+ z.boolean().optional(),
683
+ ),
684
+ },
685
+ ),
686
+
687
+ // Retry configuration
688
+ retry: objectOptionalField(
689
+ {
690
+ type: WidgetType.CONTAINER,
691
+ title: "app.api.system.releaseTool.fields.retry.title",
692
+ description:
693
+ "app.api.system.releaseTool.fields.retry.description",
694
+ layoutType: LayoutType.GRID,
695
+ columns: 12,
696
+ optional: true,
697
+ },
698
+ { request: "data" },
699
+ {
700
+ maxAttempts: requestDataField(
701
+ {
702
+ type: WidgetType.FORM_FIELD,
703
+ fieldType: FieldDataType.NUMBER,
704
+ label: "app.api.system.releaseTool.fields.maxAttempts.title",
705
+ },
706
+ z.coerce.number().optional().default(3),
707
+ ),
708
+ delayMs: requestDataField(
709
+ {
710
+ type: WidgetType.FORM_FIELD,
711
+ fieldType: FieldDataType.NUMBER,
712
+ label: "app.api.system.releaseTool.fields.delayMs.title",
713
+ },
714
+ z.coerce.number().optional().default(1000),
715
+ ),
716
+ backoffMultiplier: requestDataField(
717
+ {
718
+ type: WidgetType.FORM_FIELD,
719
+ fieldType: FieldDataType.NUMBER,
720
+ label:
721
+ "app.api.system.releaseTool.fields.backoffMultiplier.title",
722
+ },
723
+ z.coerce.number().optional().default(2),
724
+ ),
725
+ maxDelayMs: requestDataField(
726
+ {
727
+ type: WidgetType.FORM_FIELD,
728
+ fieldType: FieldDataType.NUMBER,
729
+ label: "app.api.system.releaseTool.fields.maxDelayMs.title",
730
+ },
731
+ z.coerce.number().optional().default(30000),
732
+ ),
733
+ },
734
+ ),
735
+
736
+ // Rollback configuration
737
+ rollback: objectOptionalField(
738
+ {
739
+ type: WidgetType.CONTAINER,
740
+ title: "app.api.system.releaseTool.fields.rollback.title",
741
+ description:
742
+ "app.api.system.releaseTool.fields.rollback.description",
743
+ layoutType: LayoutType.GRID,
744
+ columns: 12,
745
+ optional: true,
746
+ },
747
+ { request: "data" },
748
+ {
749
+ enabled: requestDataField(
750
+ {
751
+ type: WidgetType.FORM_FIELD,
752
+ fieldType: FieldDataType.BOOLEAN,
753
+ label:
754
+ "app.api.system.releaseTool.fields.rollbackEnabled.title",
755
+ },
756
+ z.boolean().optional().default(false),
757
+ ),
758
+ git: requestDataField(
759
+ {
760
+ type: WidgetType.FORM_FIELD,
761
+ fieldType: FieldDataType.BOOLEAN,
762
+ label: "app.api.system.releaseTool.fields.rollbackGit.title",
763
+ },
764
+ z.boolean().optional().default(true),
765
+ ),
766
+ version: requestDataField(
767
+ {
768
+ type: WidgetType.FORM_FIELD,
769
+ fieldType: FieldDataType.BOOLEAN,
770
+ label:
771
+ "app.api.system.releaseTool.fields.rollbackVersion.title",
772
+ },
773
+ z.boolean().optional().default(true),
774
+ ),
775
+ },
776
+ ),
777
+
778
+ // Packages array
779
+ packages: requestDataArrayOptionalField(
780
+ {
781
+ type: WidgetType.CONTAINER,
782
+ title: "app.api.system.releaseTool.fields.packages.title",
783
+ description:
784
+ "app.api.system.releaseTool.fields.packages.description",
785
+ layoutType: LayoutType.GRID,
786
+ columns: 12,
787
+ optional: true,
788
+ },
789
+ objectField(
790
+ {
791
+ type: WidgetType.CONTAINER,
792
+ title: "app.api.system.releaseTool.fields.package.title",
793
+ layoutType: LayoutType.GRID,
794
+ columns: 12,
795
+ },
796
+ { request: "data" },
797
+ {
798
+ directory: requestDataField(
799
+ {
800
+ type: WidgetType.FORM_FIELD,
801
+ fieldType: FieldDataType.TEXT,
802
+ label: "app.api.system.releaseTool.fields.directory.title",
803
+ },
804
+ z.string(),
805
+ ),
806
+ name: requestDataField(
807
+ {
808
+ type: WidgetType.FORM_FIELD,
809
+ fieldType: FieldDataType.TEXT,
810
+ label: "app.api.system.releaseTool.fields.name.title",
811
+ optional: true,
812
+ },
813
+ z.string().optional(),
814
+ ),
815
+ updateDeps: requestDataField(
816
+ {
817
+ type: WidgetType.FORM_FIELD,
818
+ fieldType: FieldDataType.TEXT,
819
+ label: "app.api.system.releaseTool.fields.updateDeps.title",
820
+ description:
821
+ "app.api.system.releaseTool.fields.updateDeps.description",
822
+ },
823
+ z
824
+ .union([z.boolean(), z.literal("force")])
825
+ .optional()
826
+ .default(false),
827
+ ),
828
+ clean: requestDataField(
829
+ {
830
+ type: WidgetType.FORM_FIELD,
831
+ fieldType: FieldDataType.TEXT,
832
+ label: "app.api.system.releaseTool.fields.clean.title",
833
+ description:
834
+ "app.api.system.releaseTool.fields.clean.description",
835
+ optional: true,
836
+ },
837
+ z.union([z.boolean(), z.string()]).optional(),
838
+ ),
839
+ lint: requestDataField(
840
+ {
841
+ type: WidgetType.FORM_FIELD,
842
+ fieldType: FieldDataType.TEXT,
843
+ label: "app.api.system.releaseTool.fields.lint.title",
844
+ description:
845
+ "app.api.system.releaseTool.fields.lint.description",
846
+ },
847
+ z.union([z.boolean(), z.string()]).optional().default(true),
848
+ ),
849
+ typecheck: requestDataField(
850
+ {
851
+ type: WidgetType.FORM_FIELD,
852
+ fieldType: FieldDataType.TEXT,
853
+ label: "app.api.system.releaseTool.fields.typecheck.title",
854
+ description:
855
+ "app.api.system.releaseTool.fields.typecheck.description",
856
+ optional: true,
857
+ },
858
+ z.union([z.boolean(), z.string()]).optional(),
859
+ ),
860
+ build: requestDataField(
861
+ {
862
+ type: WidgetType.FORM_FIELD,
863
+ fieldType: FieldDataType.TEXT,
864
+ label: "app.api.system.releaseTool.fields.build.title",
865
+ description:
866
+ "app.api.system.releaseTool.fields.build.description",
867
+ },
868
+ z.union([z.boolean(), z.string()]).optional().default(true),
869
+ ),
870
+ test: requestDataField(
871
+ {
872
+ type: WidgetType.FORM_FIELD,
873
+ fieldType: FieldDataType.TEXT,
874
+ label: "app.api.system.releaseTool.fields.test.title",
875
+ description:
876
+ "app.api.system.releaseTool.fields.test.description",
877
+ },
878
+ z.union([z.boolean(), z.string()]).optional().default(true),
879
+ ),
880
+ snyk: requestDataField(
881
+ {
882
+ type: WidgetType.FORM_FIELD,
883
+ fieldType: FieldDataType.BOOLEAN,
884
+ label: "app.api.system.releaseTool.fields.snyk.title",
885
+ optional: true,
886
+ },
887
+ z.boolean().optional(),
888
+ ),
889
+ install: requestDataField(
890
+ {
891
+ type: WidgetType.FORM_FIELD,
892
+ fieldType: FieldDataType.TEXT,
893
+ label: "app.api.system.releaseTool.fields.install.title",
894
+ description:
895
+ "app.api.system.releaseTool.fields.install.description",
896
+ optional: true,
897
+ },
898
+ z.union([z.boolean(), z.string()]).optional(),
899
+ ),
900
+
901
+ // Release options (nested)
902
+ release: objectOptionalField(
903
+ {
904
+ type: WidgetType.CONTAINER,
905
+ title: "app.api.system.releaseTool.fields.release.title",
906
+ layoutType: LayoutType.GRID,
907
+ columns: 12,
908
+ optional: true,
909
+ },
910
+ { request: "data" },
911
+ {
912
+ version: requestDataField(
913
+ {
914
+ type: WidgetType.FORM_FIELD,
915
+ fieldType: FieldDataType.TEXT,
916
+ label:
917
+ "app.api.system.releaseTool.fields.releaseVersion.title",
918
+ optional: true,
919
+ },
920
+ z.string().optional(),
921
+ ),
922
+ tagPrefix: requestDataField(
923
+ {
924
+ type: WidgetType.FORM_FIELD,
925
+ fieldType: FieldDataType.TEXT,
926
+ label:
927
+ "app.api.system.releaseTool.fields.tagPrefix.title",
928
+ },
929
+ z.string().optional().default("v"),
930
+ ),
931
+ tagSuffix: requestDataField(
932
+ {
933
+ type: WidgetType.FORM_FIELD,
934
+ fieldType: FieldDataType.TEXT,
935
+ label:
936
+ "app.api.system.releaseTool.fields.tagSuffix.title",
937
+ optional: true,
938
+ },
939
+ z.string().optional(),
940
+ ),
941
+ prereleaseId: requestDataField(
942
+ {
943
+ type: WidgetType.FORM_FIELD,
944
+ fieldType: FieldDataType.TEXT,
945
+ label:
946
+ "app.api.system.releaseTool.fields.prereleaseId.title",
947
+ optional: true,
948
+ },
949
+ z.string().optional(),
950
+ ),
951
+ ciReleaseCommand: objectOptionalField(
952
+ {
953
+ type: WidgetType.CONTAINER,
954
+ title:
955
+ "app.api.system.releaseTool.fields.ciReleaseCommand.title",
956
+ description:
957
+ "app.api.system.releaseTool.fields.ciReleaseCommand.description",
958
+ layoutType: LayoutType.GRID,
959
+ columns: 12,
960
+ optional: true,
961
+ },
962
+ { request: "data" },
963
+ {
964
+ command: requestDataField(
965
+ {
966
+ type: WidgetType.FORM_FIELD,
967
+ fieldType: FieldDataType.TEXT,
968
+ label:
969
+ "app.api.system.releaseTool.fields.ciCommand.title",
970
+ description:
971
+ "app.api.system.releaseTool.fields.ciCommand.description",
972
+ },
973
+ z.array(z.string()),
974
+ ),
975
+ env: requestDataField(
976
+ {
977
+ type: WidgetType.FORM_FIELD,
978
+ fieldType: FieldDataType.TEXT,
979
+ label:
980
+ "app.api.system.releaseTool.fields.ciEnvMapping.title",
981
+ description:
982
+ "app.api.system.releaseTool.fields.ciEnvMapping.description",
983
+ optional: true,
984
+ },
985
+ z.record(z.string(), z.string()).optional(),
986
+ ),
987
+ },
988
+ ),
989
+
990
+ // Git operations
991
+ git: objectOptionalField(
992
+ {
993
+ type: WidgetType.CONTAINER,
994
+ title: "app.api.system.releaseTool.fields.gitOps.title",
995
+ layoutType: LayoutType.GRID,
996
+ columns: 12,
997
+ optional: true,
998
+ },
999
+ { request: "data" },
1000
+ {
1001
+ skipTag: requestDataField(
1002
+ {
1003
+ type: WidgetType.FORM_FIELD,
1004
+ fieldType: FieldDataType.BOOLEAN,
1005
+ label:
1006
+ "app.api.system.releaseTool.fields.skipTag.title",
1007
+ optional: true,
1008
+ },
1009
+ z.boolean().optional(),
1010
+ ),
1011
+ skipPush: requestDataField(
1012
+ {
1013
+ type: WidgetType.FORM_FIELD,
1014
+ fieldType: FieldDataType.BOOLEAN,
1015
+ label:
1016
+ "app.api.system.releaseTool.fields.skipPush.title",
1017
+ optional: true,
1018
+ },
1019
+ z.boolean().optional(),
1020
+ ),
1021
+ skipCommit: requestDataField(
1022
+ {
1023
+ type: WidgetType.FORM_FIELD,
1024
+ fieldType: FieldDataType.BOOLEAN,
1025
+ label:
1026
+ "app.api.system.releaseTool.fields.skipCommit.title",
1027
+ optional: true,
1028
+ },
1029
+ z.boolean().optional(),
1030
+ ),
1031
+ commitMessage: requestDataField(
1032
+ {
1033
+ type: WidgetType.FORM_FIELD,
1034
+ fieldType: FieldDataType.TEXT,
1035
+ label:
1036
+ "app.api.system.releaseTool.fields.commitMessage.title",
1037
+ optional: true,
1038
+ },
1039
+ z.string().optional(),
1040
+ ),
1041
+ signCommit: requestDataField(
1042
+ {
1043
+ type: WidgetType.FORM_FIELD,
1044
+ fieldType: FieldDataType.BOOLEAN,
1045
+ label:
1046
+ "app.api.system.releaseTool.fields.signCommit.title",
1047
+ optional: true,
1048
+ },
1049
+ z.boolean().optional(),
1050
+ ),
1051
+ signTag: requestDataField(
1052
+ {
1053
+ type: WidgetType.FORM_FIELD,
1054
+ fieldType: FieldDataType.BOOLEAN,
1055
+ label:
1056
+ "app.api.system.releaseTool.fields.signTag.title",
1057
+ optional: true,
1058
+ },
1059
+ z.boolean().optional(),
1060
+ ),
1061
+ remote: requestDataField(
1062
+ {
1063
+ type: WidgetType.FORM_FIELD,
1064
+ fieldType: FieldDataType.TEXT,
1065
+ label:
1066
+ "app.api.system.releaseTool.fields.remote.title",
1067
+ optional: true,
1068
+ },
1069
+ z.string().optional(),
1070
+ ),
1071
+ },
1072
+ ),
1073
+
1074
+ // NPM publishing
1075
+ npm: objectOptionalField(
1076
+ {
1077
+ type: WidgetType.CONTAINER,
1078
+ title: "app.api.system.releaseTool.fields.npm.title",
1079
+ layoutType: LayoutType.GRID,
1080
+ columns: 12,
1081
+ optional: true,
1082
+ },
1083
+ { request: "data" },
1084
+ {
1085
+ enabled: requestDataField(
1086
+ {
1087
+ type: WidgetType.FORM_FIELD,
1088
+ fieldType: FieldDataType.BOOLEAN,
1089
+ label:
1090
+ "app.api.system.releaseTool.fields.npmEnabled.title",
1091
+ },
1092
+ z.boolean().optional().default(true),
1093
+ ),
1094
+ registry: requestDataField(
1095
+ {
1096
+ type: WidgetType.FORM_FIELD,
1097
+ fieldType: FieldDataType.TEXT,
1098
+ label:
1099
+ "app.api.system.releaseTool.fields.npmRegistry.title",
1100
+ optional: true,
1101
+ },
1102
+ z.string().optional(),
1103
+ ),
1104
+ tag: requestDataField(
1105
+ {
1106
+ type: WidgetType.FORM_FIELD,
1107
+ fieldType: FieldDataType.TEXT,
1108
+ label:
1109
+ "app.api.system.releaseTool.fields.npmTag.title",
1110
+ optional: true,
1111
+ },
1112
+ z.string().optional(),
1113
+ ),
1114
+ access: requestDataField(
1115
+ {
1116
+ type: WidgetType.FORM_FIELD,
1117
+ fieldType: FieldDataType.SELECT,
1118
+ label:
1119
+ "app.api.system.releaseTool.fields.npmAccess.title",
1120
+ options: [
1121
+ {
1122
+ value: "public",
1123
+ label:
1124
+ "app.api.system.releaseTool.enums.npmAccess.public",
1125
+ },
1126
+ {
1127
+ value: "restricted",
1128
+ label:
1129
+ "app.api.system.releaseTool.enums.npmAccess.restricted",
1130
+ },
1131
+ ],
1132
+ optional: true,
1133
+ },
1134
+ NpmAccessSchema.optional(),
1135
+ ),
1136
+ otpEnvVar: requestDataField(
1137
+ {
1138
+ type: WidgetType.FORM_FIELD,
1139
+ fieldType: FieldDataType.TEXT,
1140
+ label:
1141
+ "app.api.system.releaseTool.fields.otpEnvVar.title",
1142
+ optional: true,
1143
+ },
1144
+ z.string().optional(),
1145
+ ),
1146
+ provenance: requestDataField(
1147
+ {
1148
+ type: WidgetType.FORM_FIELD,
1149
+ fieldType: FieldDataType.BOOLEAN,
1150
+ label:
1151
+ "app.api.system.releaseTool.fields.provenance.title",
1152
+ optional: true,
1153
+ },
1154
+ z.boolean().optional(),
1155
+ ),
1156
+ ignoreScripts: requestDataField(
1157
+ {
1158
+ type: WidgetType.FORM_FIELD,
1159
+ fieldType: FieldDataType.BOOLEAN,
1160
+ label:
1161
+ "app.api.system.releaseTool.fields.ignoreScripts.title",
1162
+ optional: true,
1163
+ },
1164
+ z.boolean().optional(),
1165
+ ),
1166
+ dryRun: requestDataField(
1167
+ {
1168
+ type: WidgetType.FORM_FIELD,
1169
+ fieldType: FieldDataType.BOOLEAN,
1170
+ label:
1171
+ "app.api.system.releaseTool.fields.npmDryRun.title",
1172
+ optional: true,
1173
+ },
1174
+ z.boolean().optional(),
1175
+ ),
1176
+ },
1177
+ ),
1178
+
1179
+ // JSR publishing
1180
+ jsr: objectOptionalField(
1181
+ {
1182
+ type: WidgetType.CONTAINER,
1183
+ title: "app.api.system.releaseTool.fields.jsr.title",
1184
+ layoutType: LayoutType.GRID,
1185
+ columns: 12,
1186
+ optional: true,
1187
+ },
1188
+ { request: "data" },
1189
+ {
1190
+ enabled: requestDataField(
1191
+ {
1192
+ type: WidgetType.FORM_FIELD,
1193
+ fieldType: FieldDataType.BOOLEAN,
1194
+ label:
1195
+ "app.api.system.releaseTool.fields.jsrEnabled.title",
1196
+ },
1197
+ z.boolean().optional().default(false),
1198
+ ),
1199
+ allowSlowTypes: requestDataField(
1200
+ {
1201
+ type: WidgetType.FORM_FIELD,
1202
+ fieldType: FieldDataType.BOOLEAN,
1203
+ label:
1204
+ "app.api.system.releaseTool.fields.allowSlowTypes.title",
1205
+ optional: true,
1206
+ },
1207
+ z.boolean().optional(),
1208
+ ),
1209
+ allowDirty: requestDataField(
1210
+ {
1211
+ type: WidgetType.FORM_FIELD,
1212
+ fieldType: FieldDataType.BOOLEAN,
1213
+ label:
1214
+ "app.api.system.releaseTool.fields.allowDirty.title",
1215
+ optional: true,
1216
+ },
1217
+ z.boolean().optional(),
1218
+ ),
1219
+ dryRun: requestDataField(
1220
+ {
1221
+ type: WidgetType.FORM_FIELD,
1222
+ fieldType: FieldDataType.BOOLEAN,
1223
+ label:
1224
+ "app.api.system.releaseTool.fields.jsrDryRun.title",
1225
+ optional: true,
1226
+ },
1227
+ z.boolean().optional(),
1228
+ ),
1229
+ },
1230
+ ),
1231
+
1232
+ // Changelog
1233
+ changelog: objectOptionalField(
1234
+ {
1235
+ type: WidgetType.CONTAINER,
1236
+ title:
1237
+ "app.api.system.releaseTool.fields.changelog.title",
1238
+ layoutType: LayoutType.GRID,
1239
+ columns: 12,
1240
+ optional: true,
1241
+ },
1242
+ { request: "data" },
1243
+ {
1244
+ enabled: requestDataField(
1245
+ {
1246
+ type: WidgetType.FORM_FIELD,
1247
+ fieldType: FieldDataType.BOOLEAN,
1248
+ label:
1249
+ "app.api.system.releaseTool.fields.changelogEnabled.title",
1250
+ },
1251
+ z.boolean().optional().default(false),
1252
+ ),
1253
+ file: requestDataField(
1254
+ {
1255
+ type: WidgetType.FORM_FIELD,
1256
+ fieldType: FieldDataType.TEXT,
1257
+ label:
1258
+ "app.api.system.releaseTool.fields.changelogFile.title",
1259
+ },
1260
+ z.string().optional().default("CHANGELOG.md"),
1261
+ ),
1262
+ header: requestDataField(
1263
+ {
1264
+ type: WidgetType.FORM_FIELD,
1265
+ fieldType: FieldDataType.TEXT,
1266
+ label:
1267
+ "app.api.system.releaseTool.fields.changelogHeader.title",
1268
+ optional: true,
1269
+ },
1270
+ z.string().optional(),
1271
+ ),
1272
+ compareUrlFormat: requestDataField(
1273
+ {
1274
+ type: WidgetType.FORM_FIELD,
1275
+ fieldType: FieldDataType.TEXT,
1276
+ label:
1277
+ "app.api.system.releaseTool.fields.compareUrlFormat.title",
1278
+ optional: true,
1279
+ },
1280
+ z.string().optional(),
1281
+ ),
1282
+ commitUrlFormat: requestDataField(
1283
+ {
1284
+ type: WidgetType.FORM_FIELD,
1285
+ fieldType: FieldDataType.TEXT,
1286
+ label:
1287
+ "app.api.system.releaseTool.fields.commitUrlFormat.title",
1288
+ optional: true,
1289
+ },
1290
+ z.string().optional(),
1291
+ ),
1292
+ includeBody: requestDataField(
1293
+ {
1294
+ type: WidgetType.FORM_FIELD,
1295
+ fieldType: FieldDataType.BOOLEAN,
1296
+ label:
1297
+ "app.api.system.releaseTool.fields.includeBody.title",
1298
+ optional: true,
1299
+ },
1300
+ z.boolean().optional(),
1301
+ ),
1302
+ preset: requestDataField(
1303
+ {
1304
+ type: WidgetType.FORM_FIELD,
1305
+ fieldType: FieldDataType.SELECT,
1306
+ label:
1307
+ "app.api.system.releaseTool.fields.changelogPreset.title",
1308
+ options: [
1309
+ {
1310
+ value: "conventional-commits",
1311
+ label:
1312
+ "app.api.system.releaseTool.enums.changelogPreset.conventional-commits",
1313
+ },
1314
+ {
1315
+ value: "angular",
1316
+ label:
1317
+ "app.api.system.releaseTool.enums.changelogPreset.angular",
1318
+ },
1319
+ {
1320
+ value: "atom",
1321
+ label:
1322
+ "app.api.system.releaseTool.enums.changelogPreset.atom",
1323
+ },
1324
+ {
1325
+ value: "eslint",
1326
+ label:
1327
+ "app.api.system.releaseTool.enums.changelogPreset.eslint",
1328
+ },
1329
+ {
1330
+ value: "ember",
1331
+ label:
1332
+ "app.api.system.releaseTool.enums.changelogPreset.ember",
1333
+ },
1334
+ ],
1335
+ optional: true,
1336
+ },
1337
+ ChangelogPresetSchema.optional(),
1338
+ ),
1339
+ },
1340
+ ),
1341
+
1342
+ // Git release (GitHub/GitLab)
1343
+ gitRelease: objectOptionalField(
1344
+ {
1345
+ type: WidgetType.CONTAINER,
1346
+ title:
1347
+ "app.api.system.releaseTool.fields.gitRelease.title",
1348
+ layoutType: LayoutType.GRID,
1349
+ columns: 12,
1350
+ optional: true,
1351
+ },
1352
+ { request: "data" },
1353
+ {
1354
+ enabled: requestDataField(
1355
+ {
1356
+ type: WidgetType.FORM_FIELD,
1357
+ fieldType: FieldDataType.BOOLEAN,
1358
+ label:
1359
+ "app.api.system.releaseTool.fields.gitReleaseEnabled.title",
1360
+ },
1361
+ z.boolean().optional().default(false),
1362
+ ),
1363
+ title: requestDataField(
1364
+ {
1365
+ type: WidgetType.FORM_FIELD,
1366
+ fieldType: FieldDataType.TEXT,
1367
+ label:
1368
+ "app.api.system.releaseTool.fields.releaseTitle.title",
1369
+ optional: true,
1370
+ },
1371
+ z.string().optional(),
1372
+ ),
1373
+ generateNotes: requestDataField(
1374
+ {
1375
+ type: WidgetType.FORM_FIELD,
1376
+ fieldType: FieldDataType.BOOLEAN,
1377
+ label:
1378
+ "app.api.system.releaseTool.fields.generateNotes.title",
1379
+ optional: true,
1380
+ },
1381
+ z.boolean().optional(),
1382
+ ),
1383
+ body: requestDataField(
1384
+ {
1385
+ type: WidgetType.FORM_FIELD,
1386
+ fieldType: FieldDataType.TEXT,
1387
+ label:
1388
+ "app.api.system.releaseTool.fields.releaseBody.title",
1389
+ optional: true,
1390
+ },
1391
+ z.string().optional(),
1392
+ ),
1393
+ draft: requestDataField(
1394
+ {
1395
+ type: WidgetType.FORM_FIELD,
1396
+ fieldType: FieldDataType.BOOLEAN,
1397
+ label:
1398
+ "app.api.system.releaseTool.fields.draft.title",
1399
+ optional: true,
1400
+ },
1401
+ z.boolean().optional(),
1402
+ ),
1403
+ prerelease: requestDataField(
1404
+ {
1405
+ type: WidgetType.FORM_FIELD,
1406
+ fieldType: FieldDataType.BOOLEAN,
1407
+ label:
1408
+ "app.api.system.releaseTool.fields.prerelease.title",
1409
+ optional: true,
1410
+ },
1411
+ z.boolean().optional(),
1412
+ ),
1413
+ discussionCategory: requestDataField(
1414
+ {
1415
+ type: WidgetType.FORM_FIELD,
1416
+ fieldType: FieldDataType.TEXT,
1417
+ label:
1418
+ "app.api.system.releaseTool.fields.discussionCategory.title",
1419
+ optional: true,
1420
+ },
1421
+ z.string().optional(),
1422
+ ),
1423
+ target: requestDataField(
1424
+ {
1425
+ type: WidgetType.FORM_FIELD,
1426
+ fieldType: FieldDataType.TEXT,
1427
+ label:
1428
+ "app.api.system.releaseTool.fields.target.title",
1429
+ optional: true,
1430
+ },
1431
+ z.string().optional(),
1432
+ ),
1433
+ assets: requestDataField(
1434
+ {
1435
+ type: WidgetType.FORM_FIELD,
1436
+ fieldType: FieldDataType.TEXT,
1437
+ label:
1438
+ "app.api.system.releaseTool.fields.assets.title",
1439
+ description:
1440
+ "app.api.system.releaseTool.fields.assets.description",
1441
+ optional: true,
1442
+ },
1443
+ z
1444
+ .array(
1445
+ z.object({
1446
+ path: z.string(),
1447
+ name: z.string().optional(),
1448
+ label: z.string().optional(),
1449
+ contentType: z.string().optional(),
1450
+ }),
1451
+ )
1452
+ .optional(),
1453
+ ),
1454
+ },
1455
+ ),
1456
+
1457
+ // Folders to zip for release
1458
+ foldersToZip: requestDataField(
1459
+ {
1460
+ type: WidgetType.FORM_FIELD,
1461
+ fieldType: FieldDataType.TEXT,
1462
+ label:
1463
+ "app.api.system.releaseTool.fields.foldersToZip.title",
1464
+ description:
1465
+ "app.api.system.releaseTool.fields.foldersToZip.description",
1466
+ optional: true,
1467
+ },
1468
+ z
1469
+ .array(
1470
+ z.object({
1471
+ input: z.string(),
1472
+ output: z.string(),
1473
+ }),
1474
+ )
1475
+ .optional(),
1476
+ ),
1477
+
1478
+ // Version bumper for non-package.json files
1479
+ versionBumper: requestDataField(
1480
+ {
1481
+ type: WidgetType.FORM_FIELD,
1482
+ fieldType: FieldDataType.TEXT,
1483
+ label:
1484
+ "app.api.system.releaseTool.fields.versionBumper.title",
1485
+ description:
1486
+ "app.api.system.releaseTool.fields.versionBumper.description",
1487
+ optional: true,
1488
+ },
1489
+ z
1490
+ .array(
1491
+ z.object({
1492
+ filePath: z.string(),
1493
+ varName: z.string().optional(),
1494
+ pattern: z.string().optional(),
1495
+ replacement: z.string().optional(),
1496
+ }),
1497
+ )
1498
+ .optional(),
1499
+ ),
1500
+ },
1501
+ ),
1502
+
1503
+ // Package-level hooks
1504
+ hooks: objectOptionalField(
1505
+ {
1506
+ type: WidgetType.CONTAINER,
1507
+ title: "app.api.system.releaseTool.fields.hooks.title",
1508
+ description:
1509
+ "app.api.system.releaseTool.fields.hooks.description",
1510
+ layoutType: LayoutType.GRID,
1511
+ columns: 12,
1512
+ optional: true,
1513
+ },
1514
+ { request: "data" },
1515
+ {
1516
+ preInstall: requestDataField(
1517
+ {
1518
+ type: WidgetType.FORM_FIELD,
1519
+ fieldType: FieldDataType.TEXT,
1520
+ label:
1521
+ "app.api.system.releaseTool.fields.preInstall.title",
1522
+ optional: true,
1523
+ },
1524
+ z
1525
+ .object({
1526
+ command: z.string(),
1527
+ cwd: z.string().optional(),
1528
+ continueOnError: z.boolean().optional(),
1529
+ env: z.record(z.string(), z.string()).optional(),
1530
+ timeout: z.coerce.number().optional(),
1531
+ shell: z.boolean().optional(),
1532
+ })
1533
+ .optional(),
1534
+ ),
1535
+ postInstall: requestDataField(
1536
+ {
1537
+ type: WidgetType.FORM_FIELD,
1538
+ fieldType: FieldDataType.TEXT,
1539
+ label:
1540
+ "app.api.system.releaseTool.fields.postInstall.title",
1541
+ optional: true,
1542
+ },
1543
+ z
1544
+ .object({
1545
+ command: z.string(),
1546
+ cwd: z.string().optional(),
1547
+ continueOnError: z.boolean().optional(),
1548
+ env: z.record(z.string(), z.string()).optional(),
1549
+ timeout: z.coerce.number().optional(),
1550
+ shell: z.boolean().optional(),
1551
+ })
1552
+ .optional(),
1553
+ ),
1554
+ preClean: requestDataField(
1555
+ {
1556
+ type: WidgetType.FORM_FIELD,
1557
+ fieldType: FieldDataType.TEXT,
1558
+ label:
1559
+ "app.api.system.releaseTool.fields.preClean.title",
1560
+ optional: true,
1561
+ },
1562
+ z
1563
+ .object({
1564
+ command: z.string(),
1565
+ cwd: z.string().optional(),
1566
+ continueOnError: z.boolean().optional(),
1567
+ env: z.record(z.string(), z.string()).optional(),
1568
+ timeout: z.coerce.number().optional(),
1569
+ shell: z.boolean().optional(),
1570
+ })
1571
+ .optional(),
1572
+ ),
1573
+ postClean: requestDataField(
1574
+ {
1575
+ type: WidgetType.FORM_FIELD,
1576
+ fieldType: FieldDataType.TEXT,
1577
+ label:
1578
+ "app.api.system.releaseTool.fields.postClean.title",
1579
+ optional: true,
1580
+ },
1581
+ z
1582
+ .object({
1583
+ command: z.string(),
1584
+ cwd: z.string().optional(),
1585
+ continueOnError: z.boolean().optional(),
1586
+ env: z.record(z.string(), z.string()).optional(),
1587
+ timeout: z.coerce.number().optional(),
1588
+ shell: z.boolean().optional(),
1589
+ })
1590
+ .optional(),
1591
+ ),
1592
+ preLint: requestDataField(
1593
+ {
1594
+ type: WidgetType.FORM_FIELD,
1595
+ fieldType: FieldDataType.TEXT,
1596
+ label:
1597
+ "app.api.system.releaseTool.fields.preLint.title",
1598
+ optional: true,
1599
+ },
1600
+ z
1601
+ .object({
1602
+ command: z.string(),
1603
+ cwd: z.string().optional(),
1604
+ continueOnError: z.boolean().optional(),
1605
+ env: z.record(z.string(), z.string()).optional(),
1606
+ timeout: z.coerce.number().optional(),
1607
+ shell: z.boolean().optional(),
1608
+ })
1609
+ .optional(),
1610
+ ),
1611
+ postLint: requestDataField(
1612
+ {
1613
+ type: WidgetType.FORM_FIELD,
1614
+ fieldType: FieldDataType.TEXT,
1615
+ label:
1616
+ "app.api.system.releaseTool.fields.postLint.title",
1617
+ optional: true,
1618
+ },
1619
+ z
1620
+ .object({
1621
+ command: z.string(),
1622
+ cwd: z.string().optional(),
1623
+ continueOnError: z.boolean().optional(),
1624
+ env: z.record(z.string(), z.string()).optional(),
1625
+ timeout: z.coerce.number().optional(),
1626
+ shell: z.boolean().optional(),
1627
+ })
1628
+ .optional(),
1629
+ ),
1630
+ preBuild: requestDataField(
1631
+ {
1632
+ type: WidgetType.FORM_FIELD,
1633
+ fieldType: FieldDataType.TEXT,
1634
+ label:
1635
+ "app.api.system.releaseTool.fields.preBuild.title",
1636
+ optional: true,
1637
+ },
1638
+ z
1639
+ .object({
1640
+ command: z.string(),
1641
+ cwd: z.string().optional(),
1642
+ continueOnError: z.boolean().optional(),
1643
+ env: z.record(z.string(), z.string()).optional(),
1644
+ timeout: z.coerce.number().optional(),
1645
+ shell: z.boolean().optional(),
1646
+ })
1647
+ .optional(),
1648
+ ),
1649
+ postBuild: requestDataField(
1650
+ {
1651
+ type: WidgetType.FORM_FIELD,
1652
+ fieldType: FieldDataType.TEXT,
1653
+ label:
1654
+ "app.api.system.releaseTool.fields.postBuild.title",
1655
+ optional: true,
1656
+ },
1657
+ z
1658
+ .object({
1659
+ command: z.string(),
1660
+ cwd: z.string().optional(),
1661
+ continueOnError: z.boolean().optional(),
1662
+ env: z.record(z.string(), z.string()).optional(),
1663
+ timeout: z.coerce.number().optional(),
1664
+ shell: z.boolean().optional(),
1665
+ })
1666
+ .optional(),
1667
+ ),
1668
+ preTest: requestDataField(
1669
+ {
1670
+ type: WidgetType.FORM_FIELD,
1671
+ fieldType: FieldDataType.TEXT,
1672
+ label:
1673
+ "app.api.system.releaseTool.fields.preTest.title",
1674
+ optional: true,
1675
+ },
1676
+ z
1677
+ .object({
1678
+ command: z.string(),
1679
+ cwd: z.string().optional(),
1680
+ continueOnError: z.boolean().optional(),
1681
+ env: z.record(z.string(), z.string()).optional(),
1682
+ timeout: z.coerce.number().optional(),
1683
+ shell: z.boolean().optional(),
1684
+ })
1685
+ .optional(),
1686
+ ),
1687
+ postTest: requestDataField(
1688
+ {
1689
+ type: WidgetType.FORM_FIELD,
1690
+ fieldType: FieldDataType.TEXT,
1691
+ label:
1692
+ "app.api.system.releaseTool.fields.postTest.title",
1693
+ optional: true,
1694
+ },
1695
+ z
1696
+ .object({
1697
+ command: z.string(),
1698
+ cwd: z.string().optional(),
1699
+ continueOnError: z.boolean().optional(),
1700
+ env: z.record(z.string(), z.string()).optional(),
1701
+ timeout: z.coerce.number().optional(),
1702
+ shell: z.boolean().optional(),
1703
+ })
1704
+ .optional(),
1705
+ ),
1706
+ prePublish: requestDataField(
1707
+ {
1708
+ type: WidgetType.FORM_FIELD,
1709
+ fieldType: FieldDataType.TEXT,
1710
+ label:
1711
+ "app.api.system.releaseTool.fields.prePublish.title",
1712
+ optional: true,
1713
+ },
1714
+ z
1715
+ .object({
1716
+ command: z.string(),
1717
+ cwd: z.string().optional(),
1718
+ continueOnError: z.boolean().optional(),
1719
+ env: z.record(z.string(), z.string()).optional(),
1720
+ timeout: z.coerce.number().optional(),
1721
+ shell: z.boolean().optional(),
1722
+ })
1723
+ .optional(),
1724
+ ),
1725
+ postPublish: requestDataField(
1726
+ {
1727
+ type: WidgetType.FORM_FIELD,
1728
+ fieldType: FieldDataType.TEXT,
1729
+ label:
1730
+ "app.api.system.releaseTool.fields.postPublish.title",
1731
+ optional: true,
1732
+ },
1733
+ z
1734
+ .object({
1735
+ command: z.string(),
1736
+ cwd: z.string().optional(),
1737
+ continueOnError: z.boolean().optional(),
1738
+ env: z.record(z.string(), z.string()).optional(),
1739
+ timeout: z.coerce.number().optional(),
1740
+ shell: z.boolean().optional(),
1741
+ })
1742
+ .optional(),
1743
+ ),
1744
+ preRelease: requestDataField(
1745
+ {
1746
+ type: WidgetType.FORM_FIELD,
1747
+ fieldType: FieldDataType.TEXT,
1748
+ label:
1749
+ "app.api.system.releaseTool.fields.preRelease.title",
1750
+ optional: true,
1751
+ },
1752
+ z
1753
+ .object({
1754
+ command: z.string(),
1755
+ cwd: z.string().optional(),
1756
+ continueOnError: z.boolean().optional(),
1757
+ env: z.record(z.string(), z.string()).optional(),
1758
+ timeout: z.coerce.number().optional(),
1759
+ shell: z.boolean().optional(),
1760
+ })
1761
+ .optional(),
1762
+ ),
1763
+ postRelease: requestDataField(
1764
+ {
1765
+ type: WidgetType.FORM_FIELD,
1766
+ fieldType: FieldDataType.TEXT,
1767
+ label:
1768
+ "app.api.system.releaseTool.fields.postRelease.title",
1769
+ optional: true,
1770
+ },
1771
+ z
1772
+ .object({
1773
+ command: z.string(),
1774
+ cwd: z.string().optional(),
1775
+ continueOnError: z.boolean().optional(),
1776
+ env: z.record(z.string(), z.string()).optional(),
1777
+ timeout: z.coerce.number().optional(),
1778
+ shell: z.boolean().optional(),
1779
+ })
1780
+ .optional(),
1781
+ ),
1782
+ },
1783
+ ),
1784
+ },
1785
+ ),
1786
+ ),
1787
+
1788
+ // Global hooks
1789
+ hooks: objectOptionalField(
1790
+ {
1791
+ type: WidgetType.CONTAINER,
1792
+ title: "app.api.system.releaseTool.fields.globalHooks.title",
1793
+ description:
1794
+ "app.api.system.releaseTool.fields.globalHooks.description",
1795
+ layoutType: LayoutType.GRID,
1796
+ columns: 12,
1797
+ optional: true,
1798
+ },
1799
+ { request: "data" },
1800
+ {
1801
+ preRelease: requestDataField(
1802
+ {
1803
+ type: WidgetType.FORM_FIELD,
1804
+ fieldType: FieldDataType.TEXT,
1805
+ label: "app.api.system.releaseTool.fields.preRelease.title",
1806
+ optional: true,
1807
+ },
1808
+ z
1809
+ .object({
1810
+ command: z.string(),
1811
+ cwd: z.string().optional(),
1812
+ continueOnError: z.boolean().optional(),
1813
+ env: z.record(z.string(), z.string()).optional(),
1814
+ timeout: z.coerce.number().optional(),
1815
+ shell: z.boolean().optional(),
1816
+ })
1817
+ .optional(),
1818
+ ),
1819
+ postRelease: requestDataField(
1820
+ {
1821
+ type: WidgetType.FORM_FIELD,
1822
+ fieldType: FieldDataType.TEXT,
1823
+ label: "app.api.system.releaseTool.fields.postRelease.title",
1824
+ optional: true,
1825
+ },
1826
+ z
1827
+ .object({
1828
+ command: z.string(),
1829
+ cwd: z.string().optional(),
1830
+ continueOnError: z.boolean().optional(),
1831
+ env: z.record(z.string(), z.string()).optional(),
1832
+ timeout: z.coerce.number().optional(),
1833
+ shell: z.boolean().optional(),
1834
+ })
1835
+ .optional(),
1836
+ ),
1837
+ },
1838
+ ),
1839
+ },
1840
+ ),
1841
+
1842
+ // ========================================================================
1843
+ // RESPONSE FIELDS - Ordered for optimal display
1844
+ // ========================================================================
1845
+
1846
+ // Summary stats at the top
1847
+ success: responseField(
1848
+ {
1849
+ type: WidgetType.TEXT,
1850
+ content: "app.api.system.releaseTool.response.status",
1851
+ },
1852
+ z.boolean(),
1853
+ ),
1854
+
1855
+ duration: responseField(
1856
+ {
1857
+ type: WidgetType.TEXT,
1858
+ content: "app.api.system.releaseTool.response.duration",
1859
+ },
1860
+ z.coerce.number(),
1861
+ ),
1862
+
1863
+ // Output log
1864
+ output: responseField(
1865
+ {
1866
+ type: WidgetType.CODE_OUTPUT,
1867
+ },
1868
+ z.string(),
1869
+ ),
1870
+
1871
+ // Errors displayed prominently if present
1872
+ errors: responseArrayOptionalField(
1873
+ {
1874
+ type: WidgetType.DATA_LIST,
1875
+ title: "app.api.system.releaseTool.response.errors",
1876
+ optional: true,
1877
+ },
1878
+ z.string(),
1879
+ ),
1880
+
1881
+ // Warnings displayed if present
1882
+ warnings: responseArrayOptionalField(
1883
+ {
1884
+ type: WidgetType.DATA_LIST,
1885
+ title: "app.api.system.releaseTool.response.warnings",
1886
+ optional: true,
1887
+ },
1888
+ z.string(),
1889
+ ),
1890
+
1891
+ // Packages table with status highlighting
1892
+ packagesProcessed: responseArrayOptionalField(
1893
+ {
1894
+ type: WidgetType.DATA_TABLE,
1895
+ title: "app.api.system.releaseTool.response.packages",
1896
+ columns: [
1897
+ { key: "name", label: "app.api.system.releaseTool.table.name" },
1898
+ {
1899
+ key: "directory",
1900
+ label: "app.api.system.releaseTool.table.directory",
1901
+ },
1902
+ {
1903
+ key: "version",
1904
+ label: "app.api.system.releaseTool.table.version",
1905
+ },
1906
+ { key: "tag", label: "app.api.system.releaseTool.table.tag" },
1907
+ { key: "status", label: "app.api.system.releaseTool.table.status" },
1908
+ {
1909
+ key: "message",
1910
+ label: "app.api.system.releaseTool.table.message",
1911
+ },
1912
+ ],
1913
+ },
1914
+ objectField(
1915
+ {
1916
+ type: WidgetType.CONTAINER,
1917
+ layoutType: LayoutType.GRID,
1918
+ columns: 12,
1919
+ },
1920
+ { response: true },
1921
+ {
1922
+ name: responseField(
1923
+ {
1924
+ type: WidgetType.TEXT,
1925
+ content: "app.api.system.releaseTool.table.name",
1926
+ },
1927
+ z.string(),
1928
+ ),
1929
+ directory: responseField(
1930
+ {
1931
+ type: WidgetType.TEXT,
1932
+ content: "app.api.system.releaseTool.table.directory",
1933
+ },
1934
+ z.string(),
1935
+ ),
1936
+ version: responseField(
1937
+ {
1938
+ type: WidgetType.TEXT,
1939
+ content: "app.api.system.releaseTool.table.version",
1940
+ },
1941
+ z.string().optional(),
1942
+ ),
1943
+ tag: responseField(
1944
+ {
1945
+ type: WidgetType.TEXT,
1946
+ content: "app.api.system.releaseTool.table.tag",
1947
+ },
1948
+ z.string().optional(),
1949
+ ),
1950
+ status: responseField(
1951
+ { type: WidgetType.BADGE },
1952
+ PackageStatusSchema,
1953
+ ),
1954
+ message: responseField(
1955
+ {
1956
+ type: WidgetType.TEXT,
1957
+ content: "app.api.system.releaseTool.table.message",
1958
+ },
1959
+ z.string().optional(),
1960
+ ),
1961
+ },
1962
+ ),
1963
+ ),
1964
+
1965
+ // Git info displayed as metadata card
1966
+ gitInfo: responseField(
1967
+ {
1968
+ type: WidgetType.METADATA_CARD,
1969
+ title: "app.api.system.releaseTool.response.gitInfo",
1970
+ },
1971
+ z
1972
+ .object({
1973
+ currentBranch: z.string().nullable(),
1974
+ lastTag: z.string().nullable(),
1975
+ newTag: z.string().nullable(),
1976
+ commitsSinceLastTag: z.coerce.number().nullable(),
1977
+ hasUncommittedChanges: z.boolean(),
1978
+ })
1979
+ .optional(),
1980
+ ),
1981
+
1982
+ // CI environment as metadata card
1983
+ ciEnvironment: responseField(
1984
+ {
1985
+ type: WidgetType.METADATA_CARD,
1986
+ title: "app.api.system.releaseTool.response.ciEnvironment",
1987
+ },
1988
+ z
1989
+ .object({
1990
+ isCI: z.boolean(),
1991
+ provider: CIProviderSchema.nullable(),
1992
+ branch: z.string().nullable(),
1993
+ commit: z.string().nullable(),
1994
+ pr: z.string().nullable(),
1995
+ tag: z.string().nullable(),
1996
+ })
1997
+ .optional(),
1998
+ ),
1999
+
2000
+ // Published packages
2001
+ publishedPackages: responseArrayOptionalField(
2002
+ {
2003
+ type: WidgetType.DATA_TABLE,
2004
+ title: "app.api.system.releaseTool.response.published",
2005
+ columns: [
2006
+ { key: "name", label: "app.api.system.releaseTool.table.name" },
2007
+ {
2008
+ key: "version",
2009
+ label: "app.api.system.releaseTool.table.version",
2010
+ },
2011
+ {
2012
+ key: "registry",
2013
+ label: "app.api.system.releaseTool.table.registry",
2014
+ },
2015
+ { key: "url", label: "app.api.system.releaseTool.table.url" },
2016
+ ],
2017
+ },
2018
+ objectField(
2019
+ {
2020
+ type: WidgetType.CONTAINER,
2021
+ layoutType: LayoutType.GRID,
2022
+ columns: 12,
2023
+ },
2024
+ { response: true },
2025
+ {
2026
+ name: responseField(
2027
+ {
2028
+ type: WidgetType.TEXT,
2029
+ content: "app.api.system.releaseTool.table.name",
2030
+ },
2031
+ z.string(),
2032
+ ),
2033
+ version: responseField(
2034
+ { type: WidgetType.BADGE, variant: "success" },
2035
+ z.string(),
2036
+ ),
2037
+ registry: responseField(
2038
+ { type: WidgetType.BADGE, variant: "info" },
2039
+ z.string(),
2040
+ ),
2041
+ url: responseField(
2042
+ {
2043
+ type: WidgetType.TEXT,
2044
+ content: "app.api.system.releaseTool.table.url",
2045
+ },
2046
+ z.string().optional(),
2047
+ ),
2048
+ },
2049
+ ),
2050
+ ),
2051
+
2052
+ // Timings
2053
+ timings: responseField(
2054
+ {
2055
+ type: WidgetType.DATA_LIST,
2056
+ title: "app.api.system.releaseTool.response.timings",
2057
+ optional: true,
2058
+ },
2059
+ z
2060
+ .object({
2061
+ total: z.coerce.number(),
2062
+ validation: z.coerce.number().optional(),
2063
+ install: z.coerce.number().optional(),
2064
+ clean: z.coerce.number().optional(),
2065
+ lint: z.coerce.number().optional(),
2066
+ typecheck: z.coerce.number().optional(),
2067
+ build: z.coerce.number().optional(),
2068
+ test: z.coerce.number().optional(),
2069
+ publish: z.coerce.number().optional(),
2070
+ changelog: z.coerce.number().optional(),
2071
+ gitOperations: z.coerce.number().optional(),
2072
+ })
2073
+ .optional(),
2074
+ ),
2075
+
2076
+ rollbackPerformed: responseField(
2077
+ {
2078
+ type: WidgetType.BADGE,
2079
+ variant: "warning",
2080
+ },
2081
+ z.boolean().optional(),
2082
+ ),
2083
+
2084
+ notificationsSent: responseArrayOptionalField(
2085
+ {
2086
+ type: WidgetType.DATA_LIST,
2087
+ title: "app.api.system.releaseTool.response.notificationsSent",
2088
+ optional: true,
2089
+ },
2090
+ objectField(
2091
+ {
2092
+ type: WidgetType.CONTAINER,
2093
+ layoutType: LayoutType.GRID,
2094
+ columns: 12,
2095
+ },
2096
+ { response: true },
2097
+ {
2098
+ type: responseField(
2099
+ { type: WidgetType.BADGE, variant: "info" },
2100
+ z.string(),
2101
+ ),
2102
+ success: responseField({ type: WidgetType.BADGE }, z.boolean()),
2103
+ message: responseField(
2104
+ {
2105
+ type: WidgetType.TEXT,
2106
+ content: "app.api.system.releaseTool.table.message",
2107
+ },
2108
+ z.string().optional(),
2109
+ ),
2110
+ },
2111
+ ),
2112
+ ),
2113
+
2114
+ // ========================================================================
2115
+ // INTERNAL TYPES (for repository services - not shown in UI)
2116
+ // ========================================================================
2117
+
2118
+ _internal: objectOptionalField(
2119
+ { type: WidgetType.CONTAINER, optional: true },
2120
+ { response: true },
2121
+ {
2122
+ // Package.json structure
2123
+ packageJson: objectOptionalField(
2124
+ { type: WidgetType.CONTAINER, optional: true },
2125
+ { response: true },
2126
+ {
2127
+ name: responseField(
2128
+ {
2129
+ type: WidgetType.TEXT,
2130
+ content: "app.api.system.releaseTool.fields.name.title",
2131
+ },
2132
+ z.string(),
2133
+ ),
2134
+ version: responseField(
2135
+ {
2136
+ type: WidgetType.TEXT,
2137
+ content: "app.api.system.releaseTool.table.version",
2138
+ },
2139
+ z.string(),
2140
+ ),
2141
+ scripts: responseField(
2142
+ {
2143
+ type: WidgetType.TEXT,
2144
+ content: "app.api.system.releaseTool.fields.name.title",
2145
+ optional: true,
2146
+ },
2147
+ z.record(z.string(), z.string()).optional(),
2148
+ ),
2149
+ dependencies: responseField(
2150
+ {
2151
+ type: WidgetType.TEXT,
2152
+ content: "app.api.system.releaseTool.fields.name.title",
2153
+ optional: true,
2154
+ },
2155
+ z.record(z.string(), z.string()).optional(),
2156
+ ),
2157
+ devDependencies: responseField(
2158
+ {
2159
+ type: WidgetType.TEXT,
2160
+ content: "app.api.system.releaseTool.fields.name.title",
2161
+ optional: true,
2162
+ },
2163
+ z.record(z.string(), z.string()).optional(),
2164
+ ),
2165
+ peerDependencies: responseField(
2166
+ {
2167
+ type: WidgetType.TEXT,
2168
+ content: "app.api.system.releaseTool.fields.name.title",
2169
+ optional: true,
2170
+ },
2171
+ z.record(z.string(), z.string()).optional(),
2172
+ ),
2173
+ optionalDependencies: responseField(
2174
+ {
2175
+ type: WidgetType.TEXT,
2176
+ content: "app.api.system.releaseTool.fields.name.title",
2177
+ optional: true,
2178
+ },
2179
+ z.record(z.string(), z.string()).optional(),
2180
+ ),
2181
+ updateIgnoreDependencies: responseArrayOptionalField(
2182
+ {
2183
+ type: WidgetType.TEXT,
2184
+ content: "app.api.system.releaseTool.fields.name.title",
2185
+ optional: true,
2186
+ },
2187
+ z.string(),
2188
+ ),
2189
+ private: responseField(
2190
+ {
2191
+ type: WidgetType.TEXT,
2192
+ content: "app.api.system.releaseTool.fields.name.title",
2193
+ optional: true,
2194
+ },
2195
+ z.boolean().optional(),
2196
+ ),
2197
+ publishConfig: objectOptionalField(
2198
+ { type: WidgetType.CONTAINER, optional: true },
2199
+ { response: true },
2200
+ {
2201
+ access: responseField(
2202
+ {
2203
+ type: WidgetType.TEXT,
2204
+ content:
2205
+ "app.api.system.releaseTool.fields.npmAccess.title",
2206
+ optional: true,
2207
+ },
2208
+ z.enum(["public", "restricted"]).optional(),
2209
+ ),
2210
+ registry: responseField(
2211
+ {
2212
+ type: WidgetType.TEXT,
2213
+ content: "app.api.system.releaseTool.table.registry",
2214
+ optional: true,
2215
+ },
2216
+ z.string().optional(),
2217
+ ),
2218
+ tag: responseField(
2219
+ {
2220
+ type: WidgetType.TEXT,
2221
+ content: "app.api.system.releaseTool.table.tag",
2222
+ optional: true,
2223
+ },
2224
+ z.string().optional(),
2225
+ ),
2226
+ },
2227
+ ),
2228
+ repository: objectOptionalField(
2229
+ { type: WidgetType.CONTAINER, optional: true },
2230
+ { response: true },
2231
+ {
2232
+ type: responseField(
2233
+ {
2234
+ type: WidgetType.TEXT,
2235
+ content: "app.api.system.releaseTool.fields.name.title",
2236
+ },
2237
+ z.string(),
2238
+ ),
2239
+ url: responseField(
2240
+ {
2241
+ type: WidgetType.TEXT,
2242
+ content: "app.api.system.releaseTool.table.url",
2243
+ },
2244
+ z.string(),
2245
+ ),
2246
+ },
2247
+ ),
2248
+ },
2249
+ ),
2250
+
2251
+ // Version info
2252
+ versionInfo: objectOptionalField(
2253
+ { type: WidgetType.CONTAINER, optional: true },
2254
+ { response: true },
2255
+ {
2256
+ newVersion: responseField(
2257
+ {
2258
+ type: WidgetType.TEXT,
2259
+ content: "app.api.system.releaseTool.table.version",
2260
+ },
2261
+ z.string(),
2262
+ ),
2263
+ lastTag: responseField(
2264
+ {
2265
+ type: WidgetType.TEXT,
2266
+ content: "app.api.system.releaseTool.table.tag",
2267
+ },
2268
+ z.string(),
2269
+ ),
2270
+ newTag: responseField(
2271
+ {
2272
+ type: WidgetType.TEXT,
2273
+ content: "app.api.system.releaseTool.table.tag",
2274
+ },
2275
+ z.string(),
2276
+ ),
2277
+ },
2278
+ ),
2279
+
2280
+ // Parsed version
2281
+ parsedVersion: objectOptionalField(
2282
+ { type: WidgetType.CONTAINER, optional: true },
2283
+ { response: true },
2284
+ {
2285
+ major: responseField(
2286
+ {
2287
+ type: WidgetType.TEXT,
2288
+ content:
2289
+ "app.api.system.releaseTool.enums.versionIncrement.major",
2290
+ },
2291
+ z.number(),
2292
+ ),
2293
+ minor: responseField(
2294
+ {
2295
+ type: WidgetType.TEXT,
2296
+ content:
2297
+ "app.api.system.releaseTool.enums.versionIncrement.minor",
2298
+ },
2299
+ z.number(),
2300
+ ),
2301
+ patch: responseField(
2302
+ {
2303
+ type: WidgetType.TEXT,
2304
+ content:
2305
+ "app.api.system.releaseTool.enums.versionIncrement.patch",
2306
+ },
2307
+ z.number(),
2308
+ ),
2309
+ prerelease: responseField(
2310
+ {
2311
+ type: WidgetType.TEXT,
2312
+ content:
2313
+ "app.api.system.releaseTool.enums.versionIncrement.prerelease",
2314
+ optional: true,
2315
+ },
2316
+ z.string().nullable(),
2317
+ ),
2318
+ prereleaseNumber: responseField(
2319
+ {
2320
+ type: WidgetType.TEXT,
2321
+ content:
2322
+ "app.api.system.releaseTool.fields.prereleaseId.title",
2323
+ optional: true,
2324
+ },
2325
+ z.number().nullable(),
2326
+ ),
2327
+ buildMetadata: responseField(
2328
+ {
2329
+ type: WidgetType.TEXT,
2330
+ content: "app.api.system.releaseTool.fields.name.title",
2331
+ optional: true,
2332
+ },
2333
+ z.string().nullable(),
2334
+ ),
2335
+ },
2336
+ ),
2337
+
2338
+ // Repo info
2339
+ repoInfo: objectOptionalField(
2340
+ { type: WidgetType.CONTAINER, optional: true },
2341
+ { response: true },
2342
+ {
2343
+ type: responseField(
2344
+ {
2345
+ type: WidgetType.TEXT,
2346
+ content: "app.api.system.releaseTool.fields.name.title",
2347
+ },
2348
+ z.enum(["github", "gitlab", "bitbucket", "azure", "other"]),
2349
+ ),
2350
+ url: responseField(
2351
+ {
2352
+ type: WidgetType.TEXT,
2353
+ content: "app.api.system.releaseTool.table.url",
2354
+ },
2355
+ z.string(),
2356
+ ),
2357
+ owner: responseField(
2358
+ {
2359
+ type: WidgetType.TEXT,
2360
+ content: "app.api.system.releaseTool.fields.name.title",
2361
+ optional: true,
2362
+ },
2363
+ z.string().optional(),
2364
+ ),
2365
+ repo: responseField(
2366
+ {
2367
+ type: WidgetType.TEXT,
2368
+ content: "app.api.system.releaseTool.fields.name.title",
2369
+ optional: true,
2370
+ },
2371
+ z.string().optional(),
2372
+ ),
2373
+ defaultBranch: responseField(
2374
+ {
2375
+ type: WidgetType.TEXT,
2376
+ content: "app.api.system.releaseTool.fields.branchMain.title",
2377
+ optional: true,
2378
+ },
2379
+ z.string().optional(),
2380
+ ),
2381
+ },
2382
+ ),
2383
+
2384
+ // Commit info
2385
+ commitInfo: objectOptionalField(
2386
+ { type: WidgetType.CONTAINER, optional: true },
2387
+ { response: true },
2388
+ {
2389
+ sha: responseField(
2390
+ {
2391
+ type: WidgetType.TEXT,
2392
+ content: "app.api.system.releaseTool.fields.name.title",
2393
+ },
2394
+ z.string(),
2395
+ ),
2396
+ shortSha: responseField(
2397
+ {
2398
+ type: WidgetType.TEXT,
2399
+ content: "app.api.system.releaseTool.fields.name.title",
2400
+ },
2401
+ z.string(),
2402
+ ),
2403
+ subject: responseField(
2404
+ {
2405
+ type: WidgetType.TEXT,
2406
+ content: "app.api.system.releaseTool.fields.name.title",
2407
+ },
2408
+ z.string(),
2409
+ ),
2410
+ body: responseField(
2411
+ {
2412
+ type: WidgetType.TEXT,
2413
+ content:
2414
+ "app.api.system.releaseTool.fields.releaseBody.title",
2415
+ optional: true,
2416
+ },
2417
+ z.string().optional(),
2418
+ ),
2419
+ authorName: responseField(
2420
+ {
2421
+ type: WidgetType.TEXT,
2422
+ content: "app.api.system.releaseTool.fields.name.title",
2423
+ },
2424
+ z.string(),
2425
+ ),
2426
+ authorEmail: responseField(
2427
+ {
2428
+ type: WidgetType.TEXT,
2429
+ content: "app.api.system.releaseTool.fields.name.title",
2430
+ },
2431
+ z.string(),
2432
+ ),
2433
+ timestamp: responseField(
2434
+ {
2435
+ type: WidgetType.TEXT,
2436
+ content: "app.api.system.releaseTool.fields.name.title",
2437
+ },
2438
+ z.coerce.date(),
2439
+ ),
2440
+ conventionalType: responseField(
2441
+ {
2442
+ type: WidgetType.TEXT,
2443
+ content: "app.api.system.releaseTool.fields.name.title",
2444
+ optional: true,
2445
+ },
2446
+ z.string().optional(),
2447
+ ),
2448
+ conventionalScope: responseField(
2449
+ {
2450
+ type: WidgetType.TEXT,
2451
+ content: "app.api.system.releaseTool.fields.name.title",
2452
+ optional: true,
2453
+ },
2454
+ z.string().optional(),
2455
+ ),
2456
+ isBreaking: responseField(
2457
+ {
2458
+ type: WidgetType.TEXT,
2459
+ content: "app.api.system.releaseTool.fields.name.title",
2460
+ optional: true,
2461
+ },
2462
+ z.boolean().optional(),
2463
+ ),
2464
+ },
2465
+ ),
2466
+
2467
+ // Hook context
2468
+ hookContext: objectOptionalField(
2469
+ { type: WidgetType.CONTAINER, optional: true },
2470
+ { response: true },
2471
+ {
2472
+ packageManager: responseField(
2473
+ {
2474
+ type: WidgetType.TEXT,
2475
+ content:
2476
+ "app.api.system.releaseTool.fields.packageManager.title",
2477
+ },
2478
+ z.string(),
2479
+ ),
2480
+ packageName: responseField(
2481
+ {
2482
+ type: WidgetType.TEXT,
2483
+ content: "app.api.system.releaseTool.fields.name.title",
2484
+ optional: true,
2485
+ },
2486
+ z.string().optional(),
2487
+ ),
2488
+ version: responseField(
2489
+ {
2490
+ type: WidgetType.TEXT,
2491
+ content: "app.api.system.releaseTool.table.version",
2492
+ optional: true,
2493
+ },
2494
+ z.string().optional(),
2495
+ ),
2496
+ directory: responseField(
2497
+ {
2498
+ type: WidgetType.TEXT,
2499
+ content: "app.api.system.releaseTool.fields.directory.title",
2500
+ optional: true,
2501
+ },
2502
+ z.string().optional(),
2503
+ ),
2504
+ previousVersion: responseField(
2505
+ {
2506
+ type: WidgetType.TEXT,
2507
+ content: "app.api.system.releaseTool.table.version",
2508
+ optional: true,
2509
+ },
2510
+ z.string().optional(),
2511
+ ),
2512
+ tag: responseField(
2513
+ {
2514
+ type: WidgetType.TEXT,
2515
+ content: "app.api.system.releaseTool.table.tag",
2516
+ optional: true,
2517
+ },
2518
+ z.string().optional(),
2519
+ ),
2520
+ isCI: responseField(
2521
+ {
2522
+ type: WidgetType.TEXT,
2523
+ content: "app.api.system.releaseTool.fields.ci.title",
2524
+ optional: true,
2525
+ },
2526
+ z.boolean().optional(),
2527
+ ),
2528
+ ciProvider: responseField(
2529
+ {
2530
+ type: WidgetType.TEXT,
2531
+ content: "app.api.system.releaseTool.fields.name.title",
2532
+ optional: true,
2533
+ },
2534
+ z.string().optional(),
2535
+ ),
2536
+ dryRun: responseField(
2537
+ {
2538
+ type: WidgetType.TEXT,
2539
+ content: "app.api.system.releaseTool.fields.dryRun.title",
2540
+ optional: true,
2541
+ },
2542
+ z.boolean().optional(),
2543
+ ),
2544
+ },
2545
+ ),
2546
+
2547
+ // Hook result
2548
+ hookResult: objectOptionalField(
2549
+ { type: WidgetType.CONTAINER, optional: true },
2550
+ { response: true },
2551
+ {
2552
+ success: responseField(
2553
+ {
2554
+ type: WidgetType.TEXT,
2555
+ content: "app.api.system.releaseTool.response.status",
2556
+ },
2557
+ z.boolean(),
2558
+ ),
2559
+ command: responseField(
2560
+ {
2561
+ type: WidgetType.TEXT,
2562
+ content: "app.api.system.releaseTool.fields.ciCommand.title",
2563
+ },
2564
+ z.string(),
2565
+ ),
2566
+ exitCode: responseField(
2567
+ {
2568
+ type: WidgetType.TEXT,
2569
+ content: "app.api.system.releaseTool.fields.name.title",
2570
+ optional: true,
2571
+ },
2572
+ z.number().optional(),
2573
+ ),
2574
+ stdout: responseField(
2575
+ {
2576
+ type: WidgetType.TEXT,
2577
+ content: "app.api.system.releaseTool.fields.name.title",
2578
+ optional: true,
2579
+ },
2580
+ z.string().optional(),
2581
+ ),
2582
+ stderr: responseField(
2583
+ {
2584
+ type: WidgetType.TEXT,
2585
+ content: "app.api.system.releaseTool.fields.name.title",
2586
+ optional: true,
2587
+ },
2588
+ z.string().optional(),
2589
+ ),
2590
+ duration: responseField(
2591
+ {
2592
+ type: WidgetType.TEXT,
2593
+ content: "app.api.system.releaseTool.response.duration",
2594
+ optional: true,
2595
+ },
2596
+ z.number().optional(),
2597
+ ),
2598
+ message: responseField(
2599
+ {
2600
+ type: WidgetType.TEXT,
2601
+ content: "app.api.system.releaseTool.table.message",
2602
+ optional: true,
2603
+ },
2604
+ z.string().optional(),
2605
+ ),
2606
+ },
2607
+ ),
2608
+
2609
+ // Security scan result
2610
+ securityScanResult: objectOptionalField(
2611
+ { type: WidgetType.CONTAINER, optional: true },
2612
+ { response: true },
2613
+ {
2614
+ passed: responseField(
2615
+ {
2616
+ type: WidgetType.TEXT,
2617
+ content: "app.api.system.releaseTool.fields.name.title",
2618
+ },
2619
+ z.boolean(),
2620
+ ),
2621
+ vulnerabilities: objectField(
2622
+ { type: WidgetType.CONTAINER },
2623
+ { response: true },
2624
+ {
2625
+ critical: responseField(
2626
+ {
2627
+ type: WidgetType.TEXT,
2628
+ content: "app.api.system.releaseTool.fields.name.title",
2629
+ },
2630
+ z.number(),
2631
+ ),
2632
+ high: responseField(
2633
+ {
2634
+ type: WidgetType.TEXT,
2635
+ content: "app.api.system.releaseTool.fields.name.title",
2636
+ },
2637
+ z.number(),
2638
+ ),
2639
+ medium: responseField(
2640
+ {
2641
+ type: WidgetType.TEXT,
2642
+ content: "app.api.system.releaseTool.fields.name.title",
2643
+ },
2644
+ z.number(),
2645
+ ),
2646
+ low: responseField(
2647
+ {
2648
+ type: WidgetType.TEXT,
2649
+ content: "app.api.system.releaseTool.fields.name.title",
2650
+ },
2651
+ z.number(),
2652
+ ),
2653
+ },
2654
+ ),
2655
+ },
2656
+ ),
2657
+
2658
+ // Notification data
2659
+ notificationData: objectOptionalField(
2660
+ { type: WidgetType.CONTAINER, optional: true },
2661
+ { response: true },
2662
+ {
2663
+ success: responseField(
2664
+ {
2665
+ type: WidgetType.TEXT,
2666
+ content: "app.api.system.releaseTool.response.status",
2667
+ },
2668
+ z.boolean(),
2669
+ ),
2670
+ packageName: responseField(
2671
+ {
2672
+ type: WidgetType.TEXT,
2673
+ content: "app.api.system.releaseTool.fields.name.title",
2674
+ optional: true,
2675
+ },
2676
+ z.string().optional(),
2677
+ ),
2678
+ version: responseField(
2679
+ {
2680
+ type: WidgetType.TEXT,
2681
+ content: "app.api.system.releaseTool.table.version",
2682
+ optional: true,
2683
+ },
2684
+ z.string().optional(),
2685
+ ),
2686
+ duration: responseField(
2687
+ {
2688
+ type: WidgetType.TEXT,
2689
+ content: "app.api.system.releaseTool.response.duration",
2690
+ optional: true,
2691
+ },
2692
+ z.number().optional(),
2693
+ ),
2694
+ error: responseField(
2695
+ {
2696
+ type: WidgetType.TEXT,
2697
+ content: "app.api.system.releaseTool.response.errors",
2698
+ optional: true,
2699
+ },
2700
+ z.string().optional(),
2701
+ ),
2702
+ releaseUrl: responseField(
2703
+ {
2704
+ type: WidgetType.TEXT,
2705
+ content: "app.api.system.releaseTool.table.url",
2706
+ optional: true,
2707
+ },
2708
+ z.string().optional(),
2709
+ ),
2710
+ commitSha: responseField(
2711
+ {
2712
+ type: WidgetType.TEXT,
2713
+ content: "app.api.system.releaseTool.fields.name.title",
2714
+ optional: true,
2715
+ },
2716
+ z.string().optional(),
2717
+ ),
2718
+ branch: responseField(
2719
+ {
2720
+ type: WidgetType.TEXT,
2721
+ content: "app.api.system.releaseTool.fields.branch.title",
2722
+ optional: true,
2723
+ },
2724
+ z.string().optional(),
2725
+ ),
2726
+ registryUrls: responseField(
2727
+ {
2728
+ type: WidgetType.TEXT,
2729
+ content: "app.api.system.releaseTool.table.url",
2730
+ optional: true,
2731
+ },
2732
+ z.array(z.string()).optional(),
2733
+ ),
2734
+ timings: objectOptionalField(
2735
+ { type: WidgetType.CONTAINER, optional: true },
2736
+ { response: true },
2737
+ {
2738
+ total: responseField(
2739
+ {
2740
+ type: WidgetType.TEXT,
2741
+ content: "app.api.system.releaseTool.response.duration",
2742
+ optional: true,
2743
+ },
2744
+ z.number().optional(),
2745
+ ),
2746
+ version: responseField(
2747
+ {
2748
+ type: WidgetType.TEXT,
2749
+ content: "app.api.system.releaseTool.table.version",
2750
+ optional: true,
2751
+ },
2752
+ z.number().optional(),
2753
+ ),
2754
+ quality: responseField(
2755
+ {
2756
+ type: WidgetType.TEXT,
2757
+ content: "app.api.system.releaseTool.fields.name.title",
2758
+ optional: true,
2759
+ },
2760
+ z.number().optional(),
2761
+ ),
2762
+ publish: responseField(
2763
+ {
2764
+ type: WidgetType.TEXT,
2765
+ content: "app.api.system.releaseTool.fields.name.title",
2766
+ optional: true,
2767
+ },
2768
+ z.number().optional(),
2769
+ ),
2770
+ git: responseField(
2771
+ {
2772
+ type: WidgetType.TEXT,
2773
+ content: "app.api.system.releaseTool.fields.name.title",
2774
+ optional: true,
2775
+ },
2776
+ z.number().optional(),
2777
+ ),
2778
+ changelog: responseField(
2779
+ {
2780
+ type: WidgetType.TEXT,
2781
+ content:
2782
+ "app.api.system.releaseTool.fields.changelog.title",
2783
+ optional: true,
2784
+ },
2785
+ z.number().optional(),
2786
+ ),
2787
+ notification: responseField(
2788
+ {
2789
+ type: WidgetType.TEXT,
2790
+ content: "app.api.system.releaseTool.fields.name.title",
2791
+ optional: true,
2792
+ },
2793
+ z.number().optional(),
2794
+ ),
2795
+ },
2796
+ ),
2797
+ },
2798
+ ),
2799
+ },
2800
+ ),
2801
+ },
2802
+ ),
2803
+
2804
+ // === ERROR HANDLING ===
2805
+ errorTypes: {
2806
+ [EndpointErrorTypes.VALIDATION_FAILED]: {
2807
+ title: "app.api.system.releaseTool.errors.validation.title",
2808
+ description: "app.api.system.releaseTool.errors.validation.description",
2809
+ },
2810
+ [EndpointErrorTypes.NOT_FOUND]: {
2811
+ title: "app.api.system.releaseTool.errors.notFound.title",
2812
+ description: "app.api.system.releaseTool.errors.notFound.description",
2813
+ },
2814
+ [EndpointErrorTypes.SERVER_ERROR]: {
2815
+ title: "app.api.system.releaseTool.errors.server.title",
2816
+ description: "app.api.system.releaseTool.errors.server.description",
2817
+ },
2818
+ [EndpointErrorTypes.UNKNOWN_ERROR]: {
2819
+ title: "app.api.system.releaseTool.errors.unknown.title",
2820
+ description: "app.api.system.releaseTool.errors.unknown.description",
2821
+ },
2822
+ [EndpointErrorTypes.NETWORK_ERROR]: {
2823
+ title: "app.api.system.releaseTool.errors.network.title",
2824
+ description: "app.api.system.releaseTool.errors.network.description",
2825
+ },
2826
+ [EndpointErrorTypes.UNAUTHORIZED]: {
2827
+ title: "app.api.system.releaseTool.errors.unauthorized.title",
2828
+ description: "app.api.system.releaseTool.errors.unauthorized.description",
2829
+ },
2830
+ [EndpointErrorTypes.FORBIDDEN]: {
2831
+ title: "app.api.system.releaseTool.errors.forbidden.title",
2832
+ description: "app.api.system.releaseTool.errors.forbidden.description",
2833
+ },
2834
+ [EndpointErrorTypes.CONFLICT]: {
2835
+ title: "app.api.system.releaseTool.errors.conflict.title",
2836
+ description: "app.api.system.releaseTool.errors.conflict.description",
2837
+ },
2838
+ [EndpointErrorTypes.UNSAVED_CHANGES]: {
2839
+ title: "app.api.system.releaseTool.errors.unsavedChanges.title",
2840
+ description:
2841
+ "app.api.system.releaseTool.errors.unsavedChanges.description",
2842
+ },
2843
+ },
2844
+
2845
+ // === SUCCESS HANDLING ===
2846
+ successTypes: {
2847
+ title: "app.api.system.releaseTool.success.title",
2848
+ description: "app.api.system.releaseTool.success.description",
2849
+ },
2850
+
2851
+ // === EXAMPLES ===
2852
+ examples: {
2853
+ requests: {
2854
+ default: {},
2855
+ ciRelease: {
2856
+ ci: true,
2857
+ configObject: {
2858
+ packages: [{ directory: "./" }],
2859
+ },
2860
+ },
2861
+ dryRun: {
2862
+ dryRun: true,
2863
+ verbose: true,
2864
+ configObject: {
2865
+ packages: [{ directory: "./" }],
2866
+ },
2867
+ },
2868
+ },
2869
+ responses: {
2870
+ default: {
2871
+ success: true,
2872
+ output: "Release completed successfully",
2873
+ duration: 30000,
2874
+ packagesProcessed: [
2875
+ {
2876
+ name: "my-package",
2877
+ directory: "./",
2878
+ version: "1.0.1",
2879
+ tag: "v1.0.1",
2880
+ status: "success" as const,
2881
+ },
2882
+ ],
2883
+ errors: null,
2884
+ warnings: null,
2885
+ publishedPackages: null,
2886
+ notificationsSent: null,
2887
+ },
2888
+ ciRelease: {
2889
+ success: true,
2890
+ output: "CI release completed successfully",
2891
+ duration: 45000,
2892
+ packagesProcessed: [
2893
+ {
2894
+ name: "my-package",
2895
+ directory: "./",
2896
+ version: "1.0.1",
2897
+ status: "success" as const,
2898
+ message: "Published to npm",
2899
+ },
2900
+ ],
2901
+ ciEnvironment: {
2902
+ isCI: true,
2903
+ provider: "github" as const,
2904
+ branch: "main",
2905
+ commit: "abc123",
2906
+ pr: null,
2907
+ tag: "v1.0.1",
2908
+ },
2909
+ errors: null,
2910
+ warnings: null,
2911
+ publishedPackages: null,
2912
+ notificationsSent: null,
2913
+ },
2914
+ dryRun: {
2915
+ success: true,
2916
+ output: "[DRY RUN] Release simulation completed",
2917
+ duration: 5000,
2918
+ packagesProcessed: [
2919
+ {
2920
+ name: "my-package",
2921
+ directory: "./",
2922
+ version: "1.0.1",
2923
+ tag: "v1.0.1",
2924
+ status: "success" as const,
2925
+ message: "Would have been released",
2926
+ },
2927
+ ],
2928
+ errors: null,
2929
+ warnings: null,
2930
+ publishedPackages: null,
2931
+ notificationsSent: null,
2932
+ },
2933
+ },
2934
+ },
2935
+ });
2936
+
2937
+ // Export the definition
2938
+ const releaseToolDefinition = { POST };
2939
+ export default releaseToolDefinition;
2940
+
2941
+ // ============================================================================
2942
+ // Type Exports - Derived from Definition
2943
+ // ============================================================================
2944
+
2945
+ /** Request type */
2946
+ export type RequestType = typeof POST.types.RequestOutput;
2947
+
2948
+ /** Response type */
2949
+ export type ReleaseResponseType = typeof POST.types.ResponseOutput;
2950
+
2951
+ /** Package manager types - derived from schema */
2952
+ export type PackageManager = z.infer<typeof PackageManagerSchema>;
2953
+
2954
+ /** Version increment types - derived from schema */
2955
+ export type VersionIncrement = z.infer<typeof VersionIncrementSchema>;
2956
+
2957
+ /** CI provider types - derived from schema */
2958
+ export type CIProvider = z.infer<typeof CIProviderSchema>;
2959
+
2960
+ /** Package status types - derived from schema */
2961
+ export type PackageStatus = z.infer<typeof PackageStatusSchema>;
2962
+
2963
+ /** Webhook type - derived from schema */
2964
+ export type WebhookType = z.infer<typeof WebhookTypeSchema>;
2965
+
2966
+ /** Changelog preset - derived from schema */
2967
+ export type ChangelogPreset = z.infer<typeof ChangelogPresetSchema>;
2968
+
2969
+ /** NPM access level - derived from schema */
2970
+ export type NpmAccess = z.infer<typeof NpmAccessSchema>;
2971
+
2972
+ /** CI environment - derived from response schema */
2973
+ export type CIEnvironment = NonNullable<ReleaseResponseType["ciEnvironment"]>;
2974
+
2975
+ // Infer config types from request type
2976
+ export type ReleaseConfig = NonNullable<RequestType["configObject"]>;
2977
+
2978
+ /** File-based config (without runtime-only options like ci, dryRun, skipXxx, etc.) */
2979
+ export type ReleaseFileConfig = Partial<
2980
+ Pick<
2981
+ ReleaseConfig,
2982
+ | "packageManager"
2983
+ | "globalVersion"
2984
+ | "branch"
2985
+ | "continueOnError"
2986
+ | "packages"
2987
+ | "notifications"
2988
+ | "hooks"
2989
+ >
2990
+ > &
2991
+ Required<Pick<ReleaseConfig, "packages">>;
2992
+
2993
+ /** Package configuration */
2994
+ export type ReleasePackage = NonNullable<ReleaseConfig["packages"]>[number];
2995
+
2996
+ /** Release options for a package */
2997
+ export type ReleaseOptions = NonNullable<ReleasePackage["release"]>;
2998
+
2999
+ /** Git operations configuration */
3000
+ export type GitOpsConfig = NonNullable<ReleaseOptions["git"]>;
3001
+
3002
+ /** NPM publish configuration */
3003
+ export type NpmPublishConfig = NonNullable<ReleaseOptions["npm"]>;
3004
+
3005
+ /** JSR publish configuration */
3006
+ export type JsrPublishConfig = NonNullable<ReleaseOptions["jsr"]>;
3007
+
3008
+ /** Changelog configuration */
3009
+ export type ChangelogConfig = NonNullable<ReleaseOptions["changelog"]>;
3010
+
3011
+ /** Git release configuration */
3012
+ export type GitReleaseConfig = NonNullable<ReleaseOptions["gitRelease"]>;
3013
+
3014
+ /** Branch configuration */
3015
+ export type BranchConfig = NonNullable<ReleaseConfig["branch"]>;
3016
+
3017
+ /** Notification configuration */
3018
+ export type NotificationConfig = NonNullable<ReleaseConfig["notifications"]>;
3019
+
3020
+ /** Retry configuration */
3021
+ export type RetryConfig = NonNullable<ReleaseConfig["retry"]>;
3022
+
3023
+ /** Rollback configuration */
3024
+ export type RollbackConfig = NonNullable<ReleaseConfig["rollback"]>;
3025
+
3026
+ /** Hook configuration - derived from hooks schema */
3027
+ export type ReleaseHook = NonNullable<
3028
+ NonNullable<ReleaseConfig["hooks"]>["preRelease"]
3029
+ >;
3030
+
3031
+ /** Folders to zip configuration - derived from package release schema */
3032
+ export type FoldersToZip = NonNullable<ReleaseOptions["foldersToZip"]>;
3033
+
3034
+ /** Version bumper configuration - derived from package release schema */
3035
+ export type VersionBumper = NonNullable<ReleaseOptions["versionBumper"]>;
3036
+
3037
+ /** Git release assets configuration */
3038
+ export type GitReleaseAsset = NonNullable<
3039
+ NonNullable<ReleaseOptions["gitRelease"]>["assets"]
3040
+ >[number];
3041
+
3042
+ // ============================================================================
3043
+ // Response-Derived Types
3044
+ // ============================================================================
3045
+
3046
+ /** Package result - derived from response packagesProcessed */
3047
+ export type PackageResult = NonNullable<
3048
+ ReleaseResponseType["packagesProcessed"]
3049
+ >[number];
3050
+
3051
+ /** Published package - derived from response publishedPackages */
3052
+ export type PublishedPackage = NonNullable<
3053
+ ReleaseResponseType["publishedPackages"]
3054
+ >[number];
3055
+
3056
+ /** Timings breakdown - derived from response timings */
3057
+ export type Timings = NonNullable<ReleaseResponseType["timings"]>;
3058
+
3059
+ /** Notification result - derived from response notificationsSent */
3060
+ export type NotificationResult = NonNullable<
3061
+ ReleaseResponseType["notificationsSent"]
3062
+ >[number];
3063
+
3064
+ /** Git info - derived from response gitInfo */
3065
+ export type GitInfo = NonNullable<ReleaseResponseType["gitInfo"]>;
3066
+
3067
+ // ============================================================================
3068
+ // Internal Types - Derived from _internal response fields
3069
+ // ============================================================================
3070
+
3071
+ /** Internal types helper */
3072
+ type InternalTypes = NonNullable<ReleaseResponseType["_internal"]>;
3073
+
3074
+ /** Package.json structure - derived from _internal.packageJson */
3075
+ export type PackageJson = NonNullable<InternalTypes["packageJson"]>;
3076
+
3077
+ /** Version info - derived from _internal.versionInfo */
3078
+ export type VersionInfo = NonNullable<InternalTypes["versionInfo"]>;
3079
+
3080
+ /** Parsed semver version components - derived from _internal.parsedVersion */
3081
+ export type ParsedVersion = NonNullable<InternalTypes["parsedVersion"]>;
3082
+
3083
+ /** Repository hosting information - derived from _internal.repoInfo */
3084
+ export type RepoInfo = NonNullable<InternalTypes["repoInfo"]>;
3085
+
3086
+ /** Git commit information - derived from _internal.commitInfo */
3087
+ export type CommitInfo = NonNullable<InternalTypes["commitInfo"]>;
3088
+
3089
+ /** Hook execution context - derived from _internal.hookContext */
3090
+ export type HookContext = NonNullable<InternalTypes["hookContext"]>;
3091
+
3092
+ /** Hook execution result - derived from _internal.hookResult */
3093
+ export type HookResult = NonNullable<InternalTypes["hookResult"]>;
3094
+
3095
+ /** Security scan results - derived from _internal.securityScanResult */
3096
+ export type SecurityScanResult = NonNullable<
3097
+ InternalTypes["securityScanResult"]
3098
+ >;
3099
+
3100
+ /** Notification data for webhooks - derived from _internal.notificationData */
3101
+ export type NotificationData = NonNullable<InternalTypes["notificationData"]>;
3102
+
3103
+ /** Notification timings - derived from _internal.notificationData.timings */
3104
+ export type NotificationTimings = NonNullable<NotificationData["timings"]>;