@orizm/cli 3.0.1 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (359) hide show
  1. package/README.md +27 -1
  2. package/dist/agent-Bd30EhQC.mjs +14 -0
  3. package/dist/agent-Bd30EhQC.mjs.map +1 -0
  4. package/dist/agent-vC2-9rjt.cjs +14 -0
  5. package/dist/agent-vC2-9rjt.cjs.map +1 -0
  6. package/dist/auth-BnXPHgBU.cjs +18 -0
  7. package/dist/{auth-CNbONZuf.cjs.map → auth-BnXPHgBU.cjs.map} +1 -1
  8. package/dist/{auth-BGW072BP.mjs → auth-DHVtM0sF.mjs} +4 -4
  9. package/dist/{auth-BGW072BP.mjs.map → auth-DHVtM0sF.mjs.map} +1 -1
  10. package/dist/{bucket-mg5QQORh.cjs → bucket-CFaYmimY.cjs} +3 -3
  11. package/dist/{bucket-mg5QQORh.cjs.map → bucket-CFaYmimY.cjs.map} +1 -1
  12. package/dist/{bucket-DqW-WEYb.mjs → bucket-D-lu1xgZ.mjs} +3 -3
  13. package/dist/{bucket-DqW-WEYb.mjs.map → bucket-D-lu1xgZ.mjs.map} +1 -1
  14. package/dist/cli/main.cjs +14 -12
  15. package/dist/cli/main.cjs.map +1 -1
  16. package/dist/cli/main.mjs +14 -13
  17. package/dist/cli/main.mjs.map +1 -1
  18. package/dist/{cms-Cnx-lDGu.cjs → cms-CId7jg5l.cjs} +5 -5
  19. package/dist/cms-CId7jg5l.cjs.map +1 -0
  20. package/dist/{cms-BJnovGYT.mjs → cms-DLOypcw8.mjs} +5 -5
  21. package/dist/cms-DLOypcw8.mjs.map +1 -0
  22. package/dist/{codegen-DZOB4ttR.mjs → codegen-BKE_IYoM.mjs} +3 -3
  23. package/dist/{codegen-DZOB4ttR.mjs.map → codegen-BKE_IYoM.mjs.map} +1 -1
  24. package/dist/{codegen-BF5b-u46.cjs → codegen-kbbIwPbb.cjs} +3 -3
  25. package/dist/{codegen-BF5b-u46.cjs.map → codegen-kbbIwPbb.cjs.map} +1 -1
  26. package/dist/{confirm-delete-B9o73U7B.cjs → confirm-delete-BX8bJrXZ.cjs} +3 -3
  27. package/dist/{confirm-delete-B9o73U7B.cjs.map → confirm-delete-BX8bJrXZ.cjs.map} +1 -1
  28. package/dist/{confirm-delete-CsWkW69-.mjs → confirm-delete-CcKLYuCB.mjs} +2 -2
  29. package/dist/{confirm-delete-CsWkW69-.mjs.map → confirm-delete-CcKLYuCB.mjs.map} +1 -1
  30. package/dist/{consumer-C4WiGHWG.mjs → consumer-BAM3E_68.mjs} +4 -4
  31. package/dist/{consumer-C4WiGHWG.mjs.map → consumer-BAM3E_68.mjs.map} +1 -1
  32. package/dist/{consumer-pU2HyiyA.mjs → consumer-CqyZdG9v.mjs} +4 -4
  33. package/dist/consumer-CqyZdG9v.mjs.map +1 -0
  34. package/dist/consumer-D-Y6KJ8a.cjs +18 -0
  35. package/dist/{consumer-l-8wUK8E.cjs.map → consumer-D-Y6KJ8a.cjs.map} +1 -1
  36. package/dist/{consumer-OF6Z_eTP.cjs → consumer-OG6IEJun.cjs} +4 -4
  37. package/dist/consumer-OG6IEJun.cjs.map +1 -0
  38. package/dist/content-ClRuLcGq.cjs +20 -0
  39. package/dist/{content-DMjSwor1.cjs.map → content-ClRuLcGq.cjs.map} +1 -1
  40. package/dist/content-DWnYo6ad.mjs +20 -0
  41. package/dist/{content-BOb6NC8M.mjs.map → content-DWnYo6ad.mjs.map} +1 -1
  42. package/dist/{create-DJY71sp9.cjs → create-B3d4CDel.cjs} +2 -2
  43. package/dist/{create-DJY71sp9.cjs.map → create-B3d4CDel.cjs.map} +1 -1
  44. package/dist/{create-CC814ixh.mjs → create-BD6iS4n6.mjs} +2 -2
  45. package/dist/{create-CC814ixh.mjs.map → create-BD6iS4n6.mjs.map} +1 -1
  46. package/dist/{create-B-PAOor6.mjs → create-BGV3F44O.mjs} +3 -3
  47. package/dist/{create-B-PAOor6.mjs.map → create-BGV3F44O.mjs.map} +1 -1
  48. package/dist/{create-Z-z3LXNW.cjs → create-BYDbsUvw.cjs} +3 -3
  49. package/dist/{create-Z-z3LXNW.cjs.map → create-BYDbsUvw.cjs.map} +1 -1
  50. package/dist/{create-Belwettw.mjs → create-BtuS23L3.mjs} +2 -2
  51. package/dist/{create-Belwettw.mjs.map → create-BtuS23L3.mjs.map} +1 -1
  52. package/dist/{create-BvERyMKa.cjs → create-CNDCTpi0.cjs} +3 -3
  53. package/dist/{create-BvERyMKa.cjs.map → create-CNDCTpi0.cjs.map} +1 -1
  54. package/dist/{create-BNYWcyuQ.cjs → create-DzRMGpm_.cjs} +2 -2
  55. package/dist/{create-BNYWcyuQ.cjs.map → create-DzRMGpm_.cjs.map} +1 -1
  56. package/dist/{create-B1ZBOqcV.mjs → create-fweRd0UB.mjs} +2 -2
  57. package/dist/{create-B1ZBOqcV.mjs.map → create-fweRd0UB.mjs.map} +1 -1
  58. package/dist/{create-Dups0gV2.mjs → create-m5fNBqQE.mjs} +3 -3
  59. package/dist/{create-Dups0gV2.mjs.map → create-m5fNBqQE.mjs.map} +1 -1
  60. package/dist/{create-CmOriwGo.cjs → create-tWGEtI3t.cjs} +2 -2
  61. package/dist/{create-CmOriwGo.cjs.map → create-tWGEtI3t.cjs.map} +1 -1
  62. package/dist/{delete-DhSU-Lx2.mjs → delete-B8VlzzCj.mjs} +3 -3
  63. package/dist/{delete-DhSU-Lx2.mjs.map → delete-B8VlzzCj.mjs.map} +1 -1
  64. package/dist/{delete-DVrafka1.cjs → delete-B9j8c8ln.cjs} +3 -3
  65. package/dist/{delete-DVrafka1.cjs.map → delete-B9j8c8ln.cjs.map} +1 -1
  66. package/dist/{delete-ZIifaG0i.mjs → delete-BhJK-8vE.mjs} +3 -3
  67. package/dist/{delete-ZIifaG0i.mjs.map → delete-BhJK-8vE.mjs.map} +1 -1
  68. package/dist/{delete-YYh_0khQ.mjs → delete-Bi6UhAhS.mjs} +3 -3
  69. package/dist/{delete-YYh_0khQ.mjs.map → delete-Bi6UhAhS.mjs.map} +1 -1
  70. package/dist/{delete-CCTiCYIL.cjs → delete-C_oxZa_p.cjs} +3 -3
  71. package/dist/{delete-CCTiCYIL.cjs.map → delete-C_oxZa_p.cjs.map} +1 -1
  72. package/dist/{delete-CSs5Czlo.mjs → delete-Ci7cq3mU.mjs} +3 -3
  73. package/dist/{delete-CSs5Czlo.mjs.map → delete-Ci7cq3mU.mjs.map} +1 -1
  74. package/dist/{delete-XWJRhBFs.mjs → delete-CiWkGnog.mjs} +3 -3
  75. package/dist/{delete-XWJRhBFs.mjs.map → delete-CiWkGnog.mjs.map} +1 -1
  76. package/dist/{delete-DozSxZQ7.cjs → delete-Cmk80aqF.cjs} +3 -3
  77. package/dist/{delete-DozSxZQ7.cjs.map → delete-Cmk80aqF.cjs.map} +1 -1
  78. package/dist/{delete-8yZ3j0vX.cjs → delete-CvtvB2Cr.cjs} +3 -3
  79. package/dist/{delete-8yZ3j0vX.cjs.map → delete-CvtvB2Cr.cjs.map} +1 -1
  80. package/dist/{delete-CIYY59v_.cjs → delete-DG825UwK.cjs} +4 -3
  81. package/dist/{delete-CIYY59v_.cjs.map → delete-DG825UwK.cjs.map} +1 -1
  82. package/dist/{delete-WpMIIvjj.cjs → delete-DGrSMqOt.cjs} +3 -3
  83. package/dist/{delete-WpMIIvjj.cjs.map → delete-DGrSMqOt.cjs.map} +1 -1
  84. package/dist/{delete-BOUObrDw.mjs → delete-Datr3Kqq.mjs} +3 -2
  85. package/dist/{delete-BOUObrDw.mjs.map → delete-Datr3Kqq.mjs.map} +1 -1
  86. package/dist/{delete-D4r1ve4v.cjs → delete-TTF4pIKw.cjs} +3 -3
  87. package/dist/{delete-D4r1ve4v.cjs.map → delete-TTF4pIKw.cjs.map} +1 -1
  88. package/dist/{delete-BSLIXrAh.mjs → delete-X8iVsETw.mjs} +3 -3
  89. package/dist/{delete-BSLIXrAh.mjs.map → delete-X8iVsETw.mjs.map} +1 -1
  90. package/dist/docs/features/cli/authentication.md +93 -0
  91. package/dist/docs/features/cli/commands/agent.md +49 -0
  92. package/dist/docs/features/cli/commands/auth.md +36 -0
  93. package/dist/docs/features/cli/commands/bucket.md +120 -0
  94. package/dist/docs/features/cli/commands/codegen.md +51 -0
  95. package/dist/docs/features/cli/commands/content.md +117 -0
  96. package/dist/docs/features/cli/commands/key.md +155 -0
  97. package/dist/docs/features/cli/commands/link.md +21 -0
  98. package/dist/docs/features/cli/commands/org.md +18 -0
  99. package/dist/docs/features/cli/commands/project-user.md +108 -0
  100. package/dist/docs/features/cli/commands/project.md +106 -0
  101. package/dist/docs/features/cli/commands/schema.md +107 -0
  102. package/dist/docs/features/cli/commands/webhook.md +110 -0
  103. package/dist/docs/features/cli/commands.md +110 -0
  104. package/dist/docs/features/cli/configuration.md +70 -0
  105. package/dist/docs/features/cli/output.md +53 -0
  106. package/dist/docs/features/cli/project-linking.md +58 -0
  107. package/dist/docs/features/cli/quickstart.md +83 -0
  108. package/dist/docs/features/cli.md +56 -0
  109. package/dist/docs/features/cms-sdk/account.md +122 -0
  110. package/dist/docs/features/cms-sdk/auth.md +122 -0
  111. package/dist/docs/features/cms-sdk/bucket.md +113 -0
  112. package/dist/docs/features/cms-sdk/cli.md +104 -0
  113. package/dist/docs/features/cms-sdk/fetch-contents.md +608 -0
  114. package/dist/docs/features/cms-sdk/install.md +98 -0
  115. package/dist/docs/features/cms-sdk/management-user.md +244 -0
  116. package/dist/docs/features/cms-sdk/migrate-to-v2.md +152 -0
  117. package/dist/docs/features/cms-sdk/mutation-contents.md +190 -0
  118. package/dist/docs/features/console/audit-logs.md +52 -0
  119. package/dist/docs/features/console/bucket.md +70 -0
  120. package/dist/docs/features/console/create-project.md +103 -0
  121. package/dist/docs/features/console/generate-api-key.md +103 -0
  122. package/dist/docs/features/console/invite-project-users.md +70 -0
  123. package/dist/docs/features/console/management-tables.md +131 -0
  124. package/dist/docs/features/console/organization-member-management.md +78 -0
  125. package/dist/docs/features/console/schema-history.md +29 -0
  126. package/dist/docs/features/console.md +15 -0
  127. package/dist/docs/features/consumer-sdk/cli.md +60 -0
  128. package/dist/docs/features/consumer-sdk/fetch-contents.md +603 -0
  129. package/dist/docs/features/consumer-sdk/install.md +90 -0
  130. package/dist/docs/features/consumer-sdk/migrate-to-v2.md +43 -0
  131. package/dist/docs/features/design-editor/about.md +36 -0
  132. package/dist/docs/features/design-editor/getting-started.md +244 -0
  133. package/dist/docs/features/design-editor/install.md +17 -0
  134. package/dist/docs/features/design-editor/prop-editor.md +83 -0
  135. package/dist/docs/features/design-editor/schema.md +279 -0
  136. package/dist/docs/features/draft.md +241 -0
  137. package/dist/docs/features/form/about.md +83 -0
  138. package/dist/docs/features/form/editor.md +410 -0
  139. package/dist/docs/features/form/submission.md +94 -0
  140. package/dist/docs/features/full-text-search.md +64 -0
  141. package/dist/docs/features/history.md +152 -0
  142. package/dist/docs/features/schema/about.md +215 -0
  143. package/dist/docs/features/schema/authority.md +456 -0
  144. package/dist/docs/features/schema/bucket.md +142 -0
  145. package/dist/docs/features/schema/database.md +419 -0
  146. package/dist/docs/features/schema/table-module.md +140 -0
  147. package/dist/docs/features/webhook/revalidate-nextjs.md +185 -0
  148. package/dist/docs/features/webhook.md +295 -0
  149. package/dist/docs/get-started/add-model-starter.md +124 -0
  150. package/dist/docs/get-started/get-started-with-starter.md +218 -0
  151. package/dist/docs/index.md +88 -0
  152. package/dist/docs/introduction.md +140 -0
  153. package/dist/docs/manifest.json +6 -0
  154. package/dist/docs/resources/cli-migration-guide.md +82 -0
  155. package/dist/docs/resources/cli-v2-to-v3-migration-guide.md +138 -0
  156. package/dist/docs/resources/deploy-to-vercel.md +62 -0
  157. package/dist/docs/resources/limits.md +24 -0
  158. package/dist/docs/resources/private-registry.md +23 -0
  159. package/dist/docs/resources/status.md +22 -0
  160. package/dist/docs/resources/user-model.md +38 -0
  161. package/dist/{download-ogGbb3FU.cjs → download-BkzmfQXD.cjs} +2 -2
  162. package/dist/{download-ogGbb3FU.cjs.map → download-BkzmfQXD.cjs.map} +1 -1
  163. package/dist/{download-oFGzg30E.mjs → download-Dx1oyrMg.mjs} +2 -2
  164. package/dist/{download-oFGzg30E.mjs.map → download-Dx1oyrMg.mjs.map} +1 -1
  165. package/dist/{erd-zDoF6I_y.mjs → erd-BNv5Th6z.mjs} +2 -2
  166. package/dist/{erd-zDoF6I_y.mjs.map → erd-BNv5Th6z.mjs.map} +1 -1
  167. package/dist/{erd-lKC5NB2l.cjs → erd-ByuVMQ5n.cjs} +2 -2
  168. package/dist/{erd-lKC5NB2l.cjs.map → erd-ByuVMQ5n.cjs.map} +1 -1
  169. package/dist/{get-CgEgETQa.mjs → get-1TtxSEoT.mjs} +2 -2
  170. package/dist/{get-CgEgETQa.mjs.map → get-1TtxSEoT.mjs.map} +1 -1
  171. package/dist/{get-DjRyK0hJ.cjs → get-B5S1GfjR.cjs} +2 -2
  172. package/dist/{get-DjRyK0hJ.cjs.map → get-B5S1GfjR.cjs.map} +1 -1
  173. package/dist/{get-DDB89cOs.mjs → get-BLDHE_Zl.mjs} +2 -2
  174. package/dist/{get-DDB89cOs.mjs.map → get-BLDHE_Zl.mjs.map} +1 -1
  175. package/dist/{get-KdWfYINc.cjs → get-C5OH05Ka.cjs} +2 -2
  176. package/dist/{get-KdWfYINc.cjs.map → get-C5OH05Ka.cjs.map} +1 -1
  177. package/dist/{get-BiPEF_m-.cjs → get-CKZPn669.cjs} +3 -2
  178. package/dist/get-CKZPn669.cjs.map +1 -0
  179. package/dist/{get-IOU__2RP.cjs → get-CdDZkUXV.cjs} +2 -2
  180. package/dist/{get-IOU__2RP.cjs.map → get-CdDZkUXV.cjs.map} +1 -1
  181. package/dist/{get-DB80UNSR.mjs → get-Cw4Dw5NG.mjs} +2 -2
  182. package/dist/{get-DB80UNSR.mjs.map → get-Cw4Dw5NG.mjs.map} +1 -1
  183. package/dist/{get-C7dKoSIc.mjs → get-Dy3AD4il.mjs} +2 -2
  184. package/dist/{get-C7dKoSIc.mjs.map → get-Dy3AD4il.mjs.map} +1 -1
  185. package/dist/{get-BBOKSXkh.cjs → get-PVsUGHBR.cjs} +2 -2
  186. package/dist/{get-BBOKSXkh.cjs.map → get-PVsUGHBR.cjs.map} +1 -1
  187. package/dist/{get-RpxdnCKR.mjs → get-Vo3yr12d.mjs} +3 -2
  188. package/dist/get-Vo3yr12d.mjs.map +1 -0
  189. package/dist/{get-jwXRlIBJ.cjs → get-jaN2o0XY.cjs} +2 -2
  190. package/dist/{get-jwXRlIBJ.cjs.map → get-jaN2o0XY.cjs.map} +1 -1
  191. package/dist/{get-DBxhbN1G.mjs → get-qOKYAc46.mjs} +2 -2
  192. package/dist/{get-DBxhbN1G.mjs.map → get-qOKYAc46.mjs.map} +1 -1
  193. package/dist/init-CPfpVlUN.mjs +372 -0
  194. package/dist/init-CPfpVlUN.mjs.map +1 -0
  195. package/dist/init-NaL2N3Go.cjs +374 -0
  196. package/dist/init-NaL2N3Go.cjs.map +1 -0
  197. package/dist/{invite-DPygtCoO.cjs → invite-Tw3SMV0Q.cjs} +2 -2
  198. package/dist/{invite-DPygtCoO.cjs.map → invite-Tw3SMV0Q.cjs.map} +1 -1
  199. package/dist/{invite-D66DSMvq.mjs → invite-vzajkU2u.mjs} +2 -2
  200. package/dist/{invite-D66DSMvq.mjs.map → invite-vzajkU2u.mjs.map} +1 -1
  201. package/dist/{key-C71Ffll9.mjs → key-CyVxu3Uk.mjs} +3 -3
  202. package/dist/{key-C71Ffll9.mjs.map → key-CyVxu3Uk.mjs.map} +1 -1
  203. package/dist/{key-DQr7qRL2.cjs → key-tRYRqYNo.cjs} +3 -3
  204. package/dist/{key-DQr7qRL2.cjs.map → key-tRYRqYNo.cjs.map} +1 -1
  205. package/dist/{link-BluFyxEL.mjs → link-Bd55x5Zf.mjs} +2 -2
  206. package/dist/{link-BluFyxEL.mjs.map → link-Bd55x5Zf.mjs.map} +1 -1
  207. package/dist/{link-DYu1Vjlw.cjs → link-Cz7MX02S.cjs} +2 -2
  208. package/dist/{link-DYu1Vjlw.cjs.map → link-Cz7MX02S.cjs.map} +1 -1
  209. package/dist/{list-D5PSDMWw.mjs → list-2otVufvs.mjs} +3 -3
  210. package/dist/{list-D5PSDMWw.mjs.map → list-2otVufvs.mjs.map} +1 -1
  211. package/dist/{list-sQk00GV5.mjs → list-BMnBuZMr.mjs} +2 -2
  212. package/dist/{list-sQk00GV5.mjs.map → list-BMnBuZMr.mjs.map} +1 -1
  213. package/dist/{list-BwfpuhmJ.cjs → list-Bo8IMFd0.cjs} +2 -2
  214. package/dist/{list-BwfpuhmJ.cjs.map → list-Bo8IMFd0.cjs.map} +1 -1
  215. package/dist/{list-B0N4-Q-5.mjs → list-BtgAAUKm.mjs} +2 -2
  216. package/dist/{list-B0N4-Q-5.mjs.map → list-BtgAAUKm.mjs.map} +1 -1
  217. package/dist/{list-vbMaOiza.mjs → list-C0lq-gBZ.mjs} +2 -2
  218. package/dist/{list-vbMaOiza.mjs.map → list-C0lq-gBZ.mjs.map} +1 -1
  219. package/dist/{list-BsYYq9wT.mjs → list-CGZ3iT6J.mjs} +2 -2
  220. package/dist/{list-BsYYq9wT.mjs.map → list-CGZ3iT6J.mjs.map} +1 -1
  221. package/dist/{list-CFwW0G9f.cjs → list-CMWXO4nB.cjs} +2 -2
  222. package/dist/{list-CFwW0G9f.cjs.map → list-CMWXO4nB.cjs.map} +1 -1
  223. package/dist/{list-rAn3uOA7.mjs → list-Ccaec0cs.mjs} +2 -2
  224. package/dist/{list-rAn3uOA7.mjs.map → list-Ccaec0cs.mjs.map} +1 -1
  225. package/dist/{list-CU42ERNY.cjs → list-Cp_mHwbN.cjs} +2 -2
  226. package/dist/{list-CU42ERNY.cjs.map → list-Cp_mHwbN.cjs.map} +1 -1
  227. package/dist/{list-D0-QrWmn.cjs → list-Cs7kbAAi.cjs} +3 -3
  228. package/dist/{list-D0-QrWmn.cjs.map → list-Cs7kbAAi.cjs.map} +1 -1
  229. package/dist/{list-DlJssPwy.cjs → list-D5IaYurn.cjs} +2 -2
  230. package/dist/{list-DlJssPwy.cjs.map → list-D5IaYurn.cjs.map} +1 -1
  231. package/dist/{list-CbvEh7eA.mjs → list-DcIBInNA.mjs} +2 -2
  232. package/dist/{list-CbvEh7eA.mjs.map → list-DcIBInNA.mjs.map} +1 -1
  233. package/dist/{list-BzLraBnA.cjs → list-Dd3veD9Z.cjs} +2 -2
  234. package/dist/{list-BzLraBnA.cjs.map → list-Dd3veD9Z.cjs.map} +1 -1
  235. package/dist/{list-DexBclfb.cjs → list-DdVKKaDN.cjs} +2 -2
  236. package/dist/{list-DexBclfb.cjs.map → list-DdVKKaDN.cjs.map} +1 -1
  237. package/dist/{list-Br6Cmi9S.cjs → list-E1sjTZLe.cjs} +2 -2
  238. package/dist/{list-Br6Cmi9S.cjs.map → list-E1sjTZLe.cjs.map} +1 -1
  239. package/dist/{list-BRh59EqI.cjs → list-KI-7REC_.cjs} +2 -2
  240. package/dist/{list-BRh59EqI.cjs.map → list-KI-7REC_.cjs.map} +1 -1
  241. package/dist/{list-ocfd7631.mjs → list-MWD4huKP.mjs} +2 -2
  242. package/dist/{list-ocfd7631.mjs.map → list-MWD4huKP.mjs.map} +1 -1
  243. package/dist/{list-57TUfNFd.mjs → list-Pf5aAoaN.mjs} +2 -2
  244. package/dist/{list-57TUfNFd.mjs.map → list-Pf5aAoaN.mjs.map} +1 -1
  245. package/dist/{list-BHvURTWd.cjs → list-fG4zo8zz.cjs} +2 -2
  246. package/dist/{list-BHvURTWd.cjs.map → list-fG4zo8zz.cjs.map} +1 -1
  247. package/dist/{list-DrZYlidZ.mjs → list-r2UPz1zW.mjs} +2 -2
  248. package/dist/{list-DrZYlidZ.mjs.map → list-r2UPz1zW.mjs.map} +1 -1
  249. package/dist/{login-FE_dbWMo.mjs → login-Dq2L3bI7.mjs} +2 -2
  250. package/dist/{login-FE_dbWMo.mjs.map → login-Dq2L3bI7.mjs.map} +1 -1
  251. package/dist/{login-2XcHd4wn.cjs → login-M1IF2MdC.cjs} +2 -2
  252. package/dist/{login-2XcHd4wn.cjs.map → login-M1IF2MdC.cjs.map} +1 -1
  253. package/dist/{logout-DC5TMJ5_.cjs → logout-BCSfFgPz.cjs} +2 -2
  254. package/dist/{logout-DC5TMJ5_.cjs.map → logout-BCSfFgPz.cjs.map} +1 -1
  255. package/dist/{logout-BDbWrGBm.mjs → logout-DFzQCQKe.mjs} +2 -2
  256. package/dist/{logout-BDbWrGBm.mjs.map → logout-DFzQCQKe.mjs.map} +1 -1
  257. package/dist/management-C1p-Hm2Z.cjs +19 -0
  258. package/dist/{management-BGYcZB4c.cjs.map → management-C1p-Hm2Z.cjs.map} +1 -1
  259. package/dist/{management-DDACMgbU.mjs → management-h4yE09a6.mjs} +5 -5
  260. package/dist/{management-DDACMgbU.mjs.map → management-h4yE09a6.mjs.map} +1 -1
  261. package/dist/object-CZDLoc9L.cjs +20 -0
  262. package/dist/{object-DVqidsEc.cjs.map → object-CZDLoc9L.cjs.map} +1 -1
  263. package/dist/object-CqMsEkh9.mjs +20 -0
  264. package/dist/{object-qdBdEghr.mjs.map → object-CqMsEkh9.mjs.map} +1 -1
  265. package/dist/{org-CPhTRTks.mjs → org-Co-rjfr-.mjs} +2 -2
  266. package/dist/{org-CPhTRTks.mjs.map → org-Co-rjfr-.mjs.map} +1 -1
  267. package/dist/{org-C4cVovOM.cjs → org-Drj3VqIm.cjs} +2 -2
  268. package/dist/{org-C4cVovOM.cjs.map → org-Drj3VqIm.cjs.map} +1 -1
  269. package/dist/{org-context-Bewx2NEW.cjs → org-context-DKFnPH_o.cjs} +2 -2
  270. package/dist/{org-context-Bewx2NEW.cjs.map → org-context-DKFnPH_o.cjs.map} +1 -1
  271. package/dist/{org-context-D0dwWC2M.mjs → org-context-Df5McOiK.mjs} +2 -2
  272. package/dist/{org-context-D0dwWC2M.mjs.map → org-context-Df5McOiK.mjs.map} +1 -1
  273. package/dist/project-C7qWFjMV.mjs +20 -0
  274. package/dist/{project-CaXD3QBs.mjs.map → project-C7qWFjMV.mjs.map} +1 -1
  275. package/dist/project-Dm7nr5NV.cjs +20 -0
  276. package/dist/{project-BX7zvWB1.cjs.map → project-Dm7nr5NV.cjs.map} +1 -1
  277. package/dist/project-user-D9h_QBc0.mjs +20 -0
  278. package/dist/{project-user-Cp7i6orv.mjs.map → project-user-D9h_QBc0.mjs.map} +1 -1
  279. package/dist/project-user-wLFnHFwB.cjs +20 -0
  280. package/dist/{project-user-Dm0qR-sh.cjs.map → project-user-wLFnHFwB.cjs.map} +1 -1
  281. package/dist/prompt-C-XNDSNE.cjs +42 -0
  282. package/dist/prompt-C-XNDSNE.cjs.map +1 -0
  283. package/dist/prompt-Dr2Rkxun.mjs +25 -0
  284. package/dist/prompt-Dr2Rkxun.mjs.map +1 -0
  285. package/dist/{push-D7co0keA.mjs → push-54rmb0T0.mjs} +3 -2
  286. package/dist/{push-D7co0keA.mjs.map → push-54rmb0T0.mjs.map} +1 -1
  287. package/dist/{push-0u6PDz4E.cjs → push-9fPpd4U8.cjs} +4 -3
  288. package/dist/{push-0u6PDz4E.cjs.map → push-9fPpd4U8.cjs.map} +1 -1
  289. package/dist/{run-codegen-DgaFaIQ1.mjs → run-codegen-DjnV60bE.mjs} +3 -3
  290. package/dist/{run-codegen-DgaFaIQ1.mjs.map → run-codegen-DjnV60bE.mjs.map} +1 -1
  291. package/dist/{run-codegen-Ceeosw5x.cjs → run-codegen-mclysZuT.cjs} +3 -3
  292. package/dist/{run-codegen-Ceeosw5x.cjs.map → run-codegen-mclysZuT.cjs.map} +1 -1
  293. package/dist/{run-with-context-CVhmzAFZ.mjs → run-with-context-B4DyI8Wo.mjs} +6 -26
  294. package/dist/run-with-context-B4DyI8Wo.mjs.map +1 -0
  295. package/dist/{run-with-context-DJNnEigg.cjs → run-with-context-D8pSrqD_.cjs} +7 -39
  296. package/dist/run-with-context-D8pSrqD_.cjs.map +1 -0
  297. package/dist/{schema-exG250MU.mjs → schema-BL6SlLtH.mjs} +5 -5
  298. package/dist/{schema-exG250MU.mjs.map → schema-BL6SlLtH.mjs.map} +1 -1
  299. package/dist/schema-CNSTXsVa.cjs +20 -0
  300. package/dist/{schema-B3iRqvYK.cjs.map → schema-CNSTXsVa.cjs.map} +1 -1
  301. package/dist/{status-Dq_NJE71.cjs → status-CqPJTxeK.cjs} +2 -2
  302. package/dist/{status-Dq_NJE71.cjs.map → status-CqPJTxeK.cjs.map} +1 -1
  303. package/dist/{status-fWqXzV0P.mjs → status-D7nOW3R3.mjs} +2 -2
  304. package/dist/{status-fWqXzV0P.mjs.map → status-D7nOW3R3.mjs.map} +1 -1
  305. package/dist/{token-store--9GYVL7N.cjs → token-store-BgWGhqq0.cjs} +3 -3
  306. package/dist/{token-store--9GYVL7N.cjs.map → token-store-BgWGhqq0.cjs.map} +1 -1
  307. package/dist/{token-store-reCGF86F.mjs → token-store-C2r7cFA-.mjs} +2 -2
  308. package/dist/{token-store-reCGF86F.mjs.map → token-store-C2r7cFA-.mjs.map} +1 -1
  309. package/dist/{update-B4lv4dAz.mjs → update-8-sHFvNB.mjs} +2 -2
  310. package/dist/{update-B4lv4dAz.mjs.map → update-8-sHFvNB.mjs.map} +1 -1
  311. package/dist/{update-CuPRoVw3.mjs → update-B5hKKw0K.mjs} +3 -3
  312. package/dist/{update-CuPRoVw3.mjs.map → update-B5hKKw0K.mjs.map} +1 -1
  313. package/dist/{update-Do9HHWzs.cjs → update-BVaqURWE.cjs} +2 -2
  314. package/dist/{update-Do9HHWzs.cjs.map → update-BVaqURWE.cjs.map} +1 -1
  315. package/dist/{update-DRnN1kiu.cjs → update-BlUwNhLA.cjs} +2 -2
  316. package/dist/{update-DRnN1kiu.cjs.map → update-BlUwNhLA.cjs.map} +1 -1
  317. package/dist/{update-Cx_2GkQj.cjs → update-BqhLwuP7.cjs} +2 -2
  318. package/dist/{update-Cx_2GkQj.cjs.map → update-BqhLwuP7.cjs.map} +1 -1
  319. package/dist/{update-mEmULIau.mjs → update-DaYjh5VN.mjs} +2 -2
  320. package/dist/{update-mEmULIau.mjs.map → update-DaYjh5VN.mjs.map} +1 -1
  321. package/dist/{update-BXhSosHG.cjs → update-DcTzR54Z.cjs} +3 -3
  322. package/dist/{update-BXhSosHG.cjs.map → update-DcTzR54Z.cjs.map} +1 -1
  323. package/dist/{update-CIH6sSVk.cjs → update-Dne7g_0s.cjs} +2 -2
  324. package/dist/{update-CIH6sSVk.cjs.map → update-Dne7g_0s.cjs.map} +1 -1
  325. package/dist/{update-CQ4n4Xuf.mjs → update-Dy1BOnTB.mjs} +2 -2
  326. package/dist/{update-CQ4n4Xuf.mjs.map → update-Dy1BOnTB.mjs.map} +1 -1
  327. package/dist/{update-rzij1b_o.mjs → update-slz_X0mG.mjs} +2 -2
  328. package/dist/{update-rzij1b_o.mjs.map → update-slz_X0mG.mjs.map} +1 -1
  329. package/dist/{upload-DGgJ1TQk.mjs → upload-CDtzV9Wx.mjs} +3 -3
  330. package/dist/{upload-DGgJ1TQk.mjs.map → upload-CDtzV9Wx.mjs.map} +1 -1
  331. package/dist/{upload-C43ZXxyb.cjs → upload-DIln1QDA.cjs} +3 -3
  332. package/dist/{upload-C43ZXxyb.cjs.map → upload-DIln1QDA.cjs.map} +1 -1
  333. package/dist/webhook-BT3cHrq5.mjs +20 -0
  334. package/dist/{webhook-Cy850dNs.mjs.map → webhook-BT3cHrq5.mjs.map} +1 -1
  335. package/dist/webhook-CQeuAqec.cjs +20 -0
  336. package/dist/{webhook-CVFmch5W.cjs.map → webhook-CQeuAqec.cjs.map} +1 -1
  337. package/package.json +6 -5
  338. package/dist/auth-CNbONZuf.cjs +0 -18
  339. package/dist/cms-BJnovGYT.mjs.map +0 -1
  340. package/dist/cms-Cnx-lDGu.cjs.map +0 -1
  341. package/dist/consumer-OF6Z_eTP.cjs.map +0 -1
  342. package/dist/consumer-l-8wUK8E.cjs +0 -18
  343. package/dist/consumer-pU2HyiyA.mjs.map +0 -1
  344. package/dist/content-BOb6NC8M.mjs +0 -20
  345. package/dist/content-DMjSwor1.cjs +0 -20
  346. package/dist/get-BiPEF_m-.cjs.map +0 -1
  347. package/dist/get-RpxdnCKR.mjs.map +0 -1
  348. package/dist/management-BGYcZB4c.cjs +0 -19
  349. package/dist/object-DVqidsEc.cjs +0 -20
  350. package/dist/object-qdBdEghr.mjs +0 -20
  351. package/dist/project-BX7zvWB1.cjs +0 -20
  352. package/dist/project-CaXD3QBs.mjs +0 -20
  353. package/dist/project-user-Cp7i6orv.mjs +0 -20
  354. package/dist/project-user-Dm0qR-sh.cjs +0 -20
  355. package/dist/run-with-context-CVhmzAFZ.mjs.map +0 -1
  356. package/dist/run-with-context-DJNnEigg.cjs.map +0 -1
  357. package/dist/schema-B3iRqvYK.cjs +0 -20
  358. package/dist/webhook-CVFmch5W.cjs +0 -20
  359. package/dist/webhook-Cy850dNs.mjs +0 -20
@@ -1 +1 @@
1
- {"version":3,"file":"update-BXhSosHG.cjs","names":["applyKeyedEdits","Result","toResult","apiErrorFailure","missingTableEventRemovals","addTableEvents","removeTableEvents","renderDetail","formatTableEvents","formatCustomHeaders","contextArgs","defineCommand","parsePositionalId","parseTableEvents","collectRepeatableFlag","resolveArrayUpdate","parseHeaders","findDuplicateKey","parseRepeatableFlag","parseHttpUrl","runWithContext"],"sources":["../src/cli/commands/webhook/update.ts"],"sourcesContent":["import type { ArgsDef } from \"citty\";\nimport { Result } from \"@praha/byethrow\";\nimport {\n defineCommand,\n type CommandFailure,\n type CommandOutput,\n} from \"../define-command.js\";\nimport { contextArgs } from \"../shared.js\";\nimport { runWithContext, type CommandContext } from \"../run-with-context.js\";\nimport { apiErrorFailure } from \"../api-errors.js\";\nimport { toResult } from \"../../api/errors.js\";\nimport { renderDetail } from \"../../ui/detail.js\";\nimport {\n collectRepeatableFlag,\n parseHeaders,\n parseHttpUrl,\n parsePositionalId,\n parseRepeatableFlag,\n} from \"../parse.js\";\nimport {\n applyKeyedEdits,\n findDuplicateKey,\n resolveArrayUpdate,\n type ArrayUpdate,\n} from \"../array-update.js\";\nimport { warn } from \"../../ui/output.js\";\nimport { formatCustomHeaders } from \"./get.js\";\nimport {\n addTableEvents,\n formatTableEvents,\n missingTableEventRemovals,\n parseTableEvents,\n removeTableEvents,\n type TableEvent,\n} from \"./table-event.js\";\n\ntype CustomHeader = { key: string; value: string };\n\nexport function applyHeaderEdits(\n current: CustomHeader[],\n edits: { add: CustomHeader[]; remove: string[] },\n): CustomHeader[] {\n return applyKeyedEdits(current, edits, (header) => header.key);\n}\n\nexport async function webhookUpdateHandler(\n ctx: CommandContext,\n options: {\n webhookId: number;\n name?: string;\n url?: string;\n tableEvents: ArrayUpdate<TableEvent, TableEvent>;\n customHeaders: ArrayUpdate<CustomHeader, string>;\n },\n): Promise<Result.Result<CommandOutput | undefined, CommandFailure>> {\n if (\n options.name === undefined &&\n options.url === undefined &&\n options.tableEvents === undefined &&\n options.customHeaders === undefined\n ) {\n return Result.fail({\n message:\n \"Nothing to update. Pass --name, --url, a --table-event option, or a --header option.\",\n });\n }\n\n // API は配列の全置換しか受けないため、要素単位の編集は現状を取得してインメモリで編集してから送る\n let currentTableEvents: TableEvent[] = [];\n let currentHeaders: CustomHeader[] = [];\n if (\n options.tableEvents?.mode === \"edit\" ||\n options.customHeaders?.mode === \"edit\"\n ) {\n const current = toResult(\n await ctx.client.GET(\"/projects/{projectName}/webhooks/{webhookId}\", {\n params: {\n path: { projectName: ctx.projectName, webhookId: options.webhookId },\n },\n }),\n );\n if (Result.isFailure(current)) return apiErrorFailure(current.error);\n currentTableEvents = current.value.tableEvents;\n currentHeaders = current.value.customHeaders;\n\n // 存在しない対象の remove は冪等に無視する (エラーにしない) が、タイポに気づけるよう通知は出す\n if (options.tableEvents?.mode === \"edit\") {\n for (const missing of missingTableEventRemovals(\n currentTableEvents,\n options.tableEvents.remove,\n )) {\n warn(`Subscription \"${missing}\" is not set; skipped removing it.`);\n }\n }\n if (options.customHeaders?.mode === \"edit\") {\n for (const key of options.customHeaders.remove) {\n if (!currentHeaders.some((header) => header.key === key)) {\n warn(`Header \"${key}\" is not set; skipped removing it.`);\n }\n }\n }\n }\n\n const body = {\n ...(options.name !== undefined ? { name: options.name } : {}),\n ...(options.url !== undefined ? { url: options.url } : {}),\n ...(options.tableEvents !== undefined\n ? {\n tableEvents:\n options.tableEvents.mode === \"replace\"\n ? options.tableEvents.items\n : addTableEvents(\n removeTableEvents(\n currentTableEvents,\n options.tableEvents.remove,\n ),\n options.tableEvents.add,\n ),\n }\n : {}),\n ...(options.customHeaders !== undefined\n ? {\n customHeaders:\n options.customHeaders.mode === \"replace\"\n ? options.customHeaders.items\n : applyHeaderEdits(currentHeaders, options.customHeaders),\n }\n : {}),\n };\n\n const updated = toResult(\n await ctx.client.PUT(\"/projects/{projectName}/webhooks/{webhookId}\", {\n params: {\n path: { projectName: ctx.projectName, webhookId: options.webhookId },\n },\n body,\n }),\n );\n if (Result.isFailure(updated)) return apiErrorFailure(updated.error);\n\n const value = updated.value;\n return Result.succeed({\n json: value,\n text: () =>\n renderDetail([\n [\"ID\", String(value.id)],\n [\"Name\", value.name],\n [\"URL\", value.url],\n [\"Table events\", formatTableEvents(value.tableEvents)],\n [\"Custom headers\", formatCustomHeaders(value.customHeaders)],\n [\"Updated at\", value.updatedAt],\n ]),\n });\n}\n\nconst updateArgs = {\n ...contextArgs,\n id: {\n type: \"positional\",\n required: true,\n description: \"Numeric webhook ID\",\n },\n name: {\n type: \"string\",\n description: \"New webhook name\",\n },\n url: {\n type: \"string\",\n description: \"New URL to notify\",\n },\n \"table-event\": {\n type: \"string\",\n description: \"Replace all subscriptions with <table>:<event>; repeatable\",\n },\n \"add-table-event\": {\n type: \"string\",\n description: \"Add a subscription as <table>:<event>; repeatable\",\n },\n \"remove-table-event\": {\n type: \"string\",\n description: \"Remove a subscription as <table>:<event>; repeatable\",\n },\n \"clear-table-events\": {\n type: \"boolean\",\n description: \"Remove all subscriptions\",\n default: false,\n },\n header: {\n type: \"string\",\n description: \"Replace all custom headers with <key>:<value>; repeatable\",\n },\n \"add-header\": {\n type: \"string\",\n description:\n \"Add or overwrite a custom header as <key>:<value>; repeatable\",\n },\n \"remove-header\": {\n type: \"string\",\n description: \"Remove a custom header by key; repeatable\",\n },\n \"clear-headers\": {\n type: \"boolean\",\n description: \"Remove all custom headers\",\n default: false,\n },\n} satisfies ArgsDef;\n\nexport default defineCommand({\n meta: {\n name: \"update\",\n description: \"Update a webhook\",\n },\n args: updateArgs,\n run: async ({ args, rawArgs }) => {\n const webhookId = parsePositionalId(\"webhook ID\", args.id);\n if (Result.isFailure(webhookId)) return webhookId;\n\n const replaceTableEvents = parseTableEvents(\n \"table-event\",\n collectRepeatableFlag(rawArgs, \"table-event\"),\n );\n if (Result.isFailure(replaceTableEvents)) return replaceTableEvents;\n const addedTableEvents = parseTableEvents(\n \"add-table-event\",\n collectRepeatableFlag(rawArgs, \"add-table-event\"),\n );\n if (Result.isFailure(addedTableEvents)) return addedTableEvents;\n const removedTableEvents = parseTableEvents(\n \"remove-table-event\",\n collectRepeatableFlag(rawArgs, \"remove-table-event\"),\n );\n if (Result.isFailure(removedTableEvents)) return removedTableEvents;\n const tableEvents = resolveArrayUpdate({\n replaceFlag: \"table-event\",\n clearFlag: \"clear-table-events\",\n editFlags: \"--add-table-event / --remove-table-event\",\n replace: replaceTableEvents.value,\n add: addedTableEvents.value,\n remove: removedTableEvents.value,\n clear: args[\"clear-table-events\"] === true,\n });\n if (Result.isFailure(tableEvents)) return tableEvents;\n\n const replaceHeaders = parseHeaders(\n \"header\",\n collectRepeatableFlag(rawArgs, \"header\"),\n );\n if (Result.isFailure(replaceHeaders)) return replaceHeaders;\n const addedHeaders = parseHeaders(\n \"add-header\",\n collectRepeatableFlag(rawArgs, \"add-header\"),\n );\n if (Result.isFailure(addedHeaders)) return addedHeaders;\n // add は同一 key を上書きする規則のため、1 回の実行内で同じ key を複数指定されると意図が曖昧になり弾く\n const duplicateAddedKey = findDuplicateKey(\n addedHeaders.value ?? [],\n (header) => header.key,\n );\n if (duplicateAddedKey !== undefined) {\n return Result.fail({\n message: `Invalid --add-header: key \"${duplicateAddedKey}\" is specified multiple times.`,\n });\n }\n const removeHeaderValues = collectRepeatableFlag(rawArgs, \"remove-header\");\n const removedHeaderKeys =\n removeHeaderValues === undefined\n ? Result.succeed(undefined)\n : parseRepeatableFlag(\"remove-header\", removeHeaderValues);\n if (Result.isFailure(removedHeaderKeys)) return removedHeaderKeys;\n const customHeaders = resolveArrayUpdate({\n replaceFlag: \"header\",\n clearFlag: \"clear-headers\",\n editFlags: \"--add-header / --remove-header\",\n replace: replaceHeaders.value,\n add: addedHeaders.value,\n remove: removedHeaderKeys.value,\n clear: args[\"clear-headers\"] === true,\n });\n if (Result.isFailure(customHeaders)) return customHeaders;\n\n let url: string | undefined;\n if (typeof args.url === \"string\") {\n const parsedUrl = parseHttpUrl(\"url\", args.url);\n if (Result.isFailure(parsedUrl)) return parsedUrl;\n url = parsedUrl.value;\n }\n\n return runWithContext(args, (ctx) =>\n webhookUpdateHandler(ctx, {\n webhookId: webhookId.value,\n name: typeof args.name === \"string\" ? args.name : undefined,\n url,\n tableEvents: tableEvents.value,\n customHeaders: customHeaders.value,\n }),\n );\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"update-DcTzR54Z.cjs","names":["applyKeyedEdits","Result","toResult","apiErrorFailure","missingTableEventRemovals","addTableEvents","removeTableEvents","renderDetail","formatTableEvents","formatCustomHeaders","contextArgs","defineCommand","parsePositionalId","parseTableEvents","collectRepeatableFlag","resolveArrayUpdate","parseHeaders","findDuplicateKey","parseRepeatableFlag","parseHttpUrl","runWithContext"],"sources":["../src/cli/commands/webhook/update.ts"],"sourcesContent":["import type { ArgsDef } from \"citty\";\nimport { Result } from \"@praha/byethrow\";\nimport {\n defineCommand,\n type CommandFailure,\n type CommandOutput,\n} from \"../define-command.js\";\nimport { contextArgs } from \"../shared.js\";\nimport { runWithContext, type CommandContext } from \"../run-with-context.js\";\nimport { apiErrorFailure } from \"../api-errors.js\";\nimport { toResult } from \"../../api/errors.js\";\nimport { renderDetail } from \"../../ui/detail.js\";\nimport {\n collectRepeatableFlag,\n parseHeaders,\n parseHttpUrl,\n parsePositionalId,\n parseRepeatableFlag,\n} from \"../parse.js\";\nimport {\n applyKeyedEdits,\n findDuplicateKey,\n resolveArrayUpdate,\n type ArrayUpdate,\n} from \"../array-update.js\";\nimport { warn } from \"../../ui/output.js\";\nimport { formatCustomHeaders } from \"./get.js\";\nimport {\n addTableEvents,\n formatTableEvents,\n missingTableEventRemovals,\n parseTableEvents,\n removeTableEvents,\n type TableEvent,\n} from \"./table-event.js\";\n\ntype CustomHeader = { key: string; value: string };\n\nexport function applyHeaderEdits(\n current: CustomHeader[],\n edits: { add: CustomHeader[]; remove: string[] },\n): CustomHeader[] {\n return applyKeyedEdits(current, edits, (header) => header.key);\n}\n\nexport async function webhookUpdateHandler(\n ctx: CommandContext,\n options: {\n webhookId: number;\n name?: string;\n url?: string;\n tableEvents: ArrayUpdate<TableEvent, TableEvent>;\n customHeaders: ArrayUpdate<CustomHeader, string>;\n },\n): Promise<Result.Result<CommandOutput | undefined, CommandFailure>> {\n if (\n options.name === undefined &&\n options.url === undefined &&\n options.tableEvents === undefined &&\n options.customHeaders === undefined\n ) {\n return Result.fail({\n message:\n \"Nothing to update. Pass --name, --url, a --table-event option, or a --header option.\",\n });\n }\n\n // API は配列の全置換しか受けないため、要素単位の編集は現状を取得してインメモリで編集してから送る\n let currentTableEvents: TableEvent[] = [];\n let currentHeaders: CustomHeader[] = [];\n if (\n options.tableEvents?.mode === \"edit\" ||\n options.customHeaders?.mode === \"edit\"\n ) {\n const current = toResult(\n await ctx.client.GET(\"/projects/{projectName}/webhooks/{webhookId}\", {\n params: {\n path: { projectName: ctx.projectName, webhookId: options.webhookId },\n },\n }),\n );\n if (Result.isFailure(current)) return apiErrorFailure(current.error);\n currentTableEvents = current.value.tableEvents;\n currentHeaders = current.value.customHeaders;\n\n // 存在しない対象の remove は冪等に無視する (エラーにしない) が、タイポに気づけるよう通知は出す\n if (options.tableEvents?.mode === \"edit\") {\n for (const missing of missingTableEventRemovals(\n currentTableEvents,\n options.tableEvents.remove,\n )) {\n warn(`Subscription \"${missing}\" is not set; skipped removing it.`);\n }\n }\n if (options.customHeaders?.mode === \"edit\") {\n for (const key of options.customHeaders.remove) {\n if (!currentHeaders.some((header) => header.key === key)) {\n warn(`Header \"${key}\" is not set; skipped removing it.`);\n }\n }\n }\n }\n\n const body = {\n ...(options.name !== undefined ? { name: options.name } : {}),\n ...(options.url !== undefined ? { url: options.url } : {}),\n ...(options.tableEvents !== undefined\n ? {\n tableEvents:\n options.tableEvents.mode === \"replace\"\n ? options.tableEvents.items\n : addTableEvents(\n removeTableEvents(\n currentTableEvents,\n options.tableEvents.remove,\n ),\n options.tableEvents.add,\n ),\n }\n : {}),\n ...(options.customHeaders !== undefined\n ? {\n customHeaders:\n options.customHeaders.mode === \"replace\"\n ? options.customHeaders.items\n : applyHeaderEdits(currentHeaders, options.customHeaders),\n }\n : {}),\n };\n\n const updated = toResult(\n await ctx.client.PUT(\"/projects/{projectName}/webhooks/{webhookId}\", {\n params: {\n path: { projectName: ctx.projectName, webhookId: options.webhookId },\n },\n body,\n }),\n );\n if (Result.isFailure(updated)) return apiErrorFailure(updated.error);\n\n const value = updated.value;\n return Result.succeed({\n json: value,\n text: () =>\n renderDetail([\n [\"ID\", String(value.id)],\n [\"Name\", value.name],\n [\"URL\", value.url],\n [\"Table events\", formatTableEvents(value.tableEvents)],\n [\"Custom headers\", formatCustomHeaders(value.customHeaders)],\n [\"Updated at\", value.updatedAt],\n ]),\n });\n}\n\nconst updateArgs = {\n ...contextArgs,\n id: {\n type: \"positional\",\n required: true,\n description: \"Numeric webhook ID\",\n },\n name: {\n type: \"string\",\n description: \"New webhook name\",\n },\n url: {\n type: \"string\",\n description: \"New URL to notify\",\n },\n \"table-event\": {\n type: \"string\",\n description: \"Replace all subscriptions with <table>:<event>; repeatable\",\n },\n \"add-table-event\": {\n type: \"string\",\n description: \"Add a subscription as <table>:<event>; repeatable\",\n },\n \"remove-table-event\": {\n type: \"string\",\n description: \"Remove a subscription as <table>:<event>; repeatable\",\n },\n \"clear-table-events\": {\n type: \"boolean\",\n description: \"Remove all subscriptions\",\n default: false,\n },\n header: {\n type: \"string\",\n description: \"Replace all custom headers with <key>:<value>; repeatable\",\n },\n \"add-header\": {\n type: \"string\",\n description:\n \"Add or overwrite a custom header as <key>:<value>; repeatable\",\n },\n \"remove-header\": {\n type: \"string\",\n description: \"Remove a custom header by key; repeatable\",\n },\n \"clear-headers\": {\n type: \"boolean\",\n description: \"Remove all custom headers\",\n default: false,\n },\n} satisfies ArgsDef;\n\nexport default defineCommand({\n meta: {\n name: \"update\",\n description: \"Update a webhook\",\n },\n args: updateArgs,\n run: async ({ args, rawArgs }) => {\n const webhookId = parsePositionalId(\"webhook ID\", args.id);\n if (Result.isFailure(webhookId)) return webhookId;\n\n const replaceTableEvents = parseTableEvents(\n \"table-event\",\n collectRepeatableFlag(rawArgs, \"table-event\"),\n );\n if (Result.isFailure(replaceTableEvents)) return replaceTableEvents;\n const addedTableEvents = parseTableEvents(\n \"add-table-event\",\n collectRepeatableFlag(rawArgs, \"add-table-event\"),\n );\n if (Result.isFailure(addedTableEvents)) return addedTableEvents;\n const removedTableEvents = parseTableEvents(\n \"remove-table-event\",\n collectRepeatableFlag(rawArgs, \"remove-table-event\"),\n );\n if (Result.isFailure(removedTableEvents)) return removedTableEvents;\n const tableEvents = resolveArrayUpdate({\n replaceFlag: \"table-event\",\n clearFlag: \"clear-table-events\",\n editFlags: \"--add-table-event / --remove-table-event\",\n replace: replaceTableEvents.value,\n add: addedTableEvents.value,\n remove: removedTableEvents.value,\n clear: args[\"clear-table-events\"] === true,\n });\n if (Result.isFailure(tableEvents)) return tableEvents;\n\n const replaceHeaders = parseHeaders(\n \"header\",\n collectRepeatableFlag(rawArgs, \"header\"),\n );\n if (Result.isFailure(replaceHeaders)) return replaceHeaders;\n const addedHeaders = parseHeaders(\n \"add-header\",\n collectRepeatableFlag(rawArgs, \"add-header\"),\n );\n if (Result.isFailure(addedHeaders)) return addedHeaders;\n // add は同一 key を上書きする規則のため、1 回の実行内で同じ key を複数指定されると意図が曖昧になり弾く\n const duplicateAddedKey = findDuplicateKey(\n addedHeaders.value ?? [],\n (header) => header.key,\n );\n if (duplicateAddedKey !== undefined) {\n return Result.fail({\n message: `Invalid --add-header: key \"${duplicateAddedKey}\" is specified multiple times.`,\n });\n }\n const removeHeaderValues = collectRepeatableFlag(rawArgs, \"remove-header\");\n const removedHeaderKeys =\n removeHeaderValues === undefined\n ? Result.succeed(undefined)\n : parseRepeatableFlag(\"remove-header\", removeHeaderValues);\n if (Result.isFailure(removedHeaderKeys)) return removedHeaderKeys;\n const customHeaders = resolveArrayUpdate({\n replaceFlag: \"header\",\n clearFlag: \"clear-headers\",\n editFlags: \"--add-header / --remove-header\",\n replace: replaceHeaders.value,\n add: addedHeaders.value,\n remove: removedHeaderKeys.value,\n clear: args[\"clear-headers\"] === true,\n });\n if (Result.isFailure(customHeaders)) return customHeaders;\n\n let url: string | undefined;\n if (typeof args.url === \"string\") {\n const parsedUrl = parseHttpUrl(\"url\", args.url);\n if (Result.isFailure(parsedUrl)) return parsedUrl;\n url = parsedUrl.value;\n }\n\n return runWithContext(args, (ctx) =>\n webhookUpdateHandler(ctx, {\n webhookId: webhookId.value,\n name: typeof args.name === \"string\" ? args.name : undefined,\n url,\n tableEvents: tableEvents.value,\n customHeaders: customHeaders.value,\n }),\n );\n },\n});\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  const require_cli_main = require('./cli/main.cjs');
2
2
  const require_shared = require('./shared-DHRPzzKl.cjs');
3
- const require_run_with_context = require('./run-with-context-DJNnEigg.cjs');
3
+ const require_run_with_context = require('./run-with-context-D8pSrqD_.cjs');
4
4
  const require_detail = require('./detail-8CXNIhKw.cjs');
5
5
  const require_parse = require('./parse-C8oHgQXx.cjs');
6
6
  const require_array_update = require('./array-update-Dch4e9tI.cjs');
@@ -106,4 +106,4 @@ var update_default = require_cli_main.defineCommand({
106
106
 
107
107
  //#endregion
108
108
  exports.default = update_default;
109
- //# sourceMappingURL=update-CIH6sSVk.cjs.map
109
+ //# sourceMappingURL=update-Dne7g_0s.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"update-CIH6sSVk.cjs","names":["Result","toResult","apiErrorFailure","applyGroupRoleEdits","renderDetail","formatGroupRoles","contextArgs","defineCommand","parseGroupRoles","collectRepeatableFlag","parseRepeatableFlag","resolveArrayUpdate","runWithContext"],"sources":["../src/cli/commands/project-user/update.ts"],"sourcesContent":["import type { ArgsDef } from \"citty\";\nimport { Result } from \"@praha/byethrow\";\nimport {\n defineCommand,\n type CommandFailure,\n type CommandOutput,\n} from \"../define-command.js\";\nimport { contextArgs } from \"../shared.js\";\nimport { runWithContext, type CommandContext } from \"../run-with-context.js\";\nimport { apiErrorFailure } from \"../api-errors.js\";\nimport { toResult } from \"../../api/errors.js\";\nimport { renderDetail } from \"../../ui/detail.js\";\nimport { collectRepeatableFlag, parseRepeatableFlag } from \"../parse.js\";\nimport { resolveArrayUpdate, type ArrayUpdate } from \"../array-update.js\";\nimport {\n applyGroupRoleEdits,\n formatGroupRoles,\n warnMissingGroupRemovals,\n parseGroupRoles,\n type GroupRole,\n} from \"../group-roles.js\";\n\nexport async function projectUserUpdateHandler(\n ctx: CommandContext,\n options: {\n userId: string;\n name?: string;\n groupRoles: ArrayUpdate<GroupRole, string>;\n },\n): Promise<Result.Result<CommandOutput | undefined, CommandFailure>> {\n if (options.name === undefined && options.groupRoles === undefined) {\n return Result.fail({\n message: \"Nothing to update. Pass --name or a --group-role option.\",\n });\n }\n\n // API は groupRoles の全置換しか受けないため、要素単位の編集は現状を取得してから組み立てる\n let groupRoles: GroupRole[] | undefined;\n if (options.groupRoles?.mode === \"edit\") {\n const current = toResult(\n await ctx.client.GET(\"/projects/{projectName}/users/{userId}\", {\n params: {\n path: { projectName: ctx.projectName, userId: options.userId },\n },\n }),\n );\n if (Result.isFailure(current)) return apiErrorFailure(current.error);\n warnMissingGroupRemovals(\n current.value.groupRoles,\n options.groupRoles.remove,\n );\n groupRoles = applyGroupRoleEdits(\n current.value.groupRoles,\n options.groupRoles,\n );\n } else if (options.groupRoles !== undefined) {\n groupRoles = options.groupRoles.items;\n }\n\n const body = {\n ...(options.name !== undefined ? { name: options.name } : {}),\n ...(groupRoles !== undefined ? { groupRoles } : {}),\n };\n\n const updated = toResult(\n await ctx.client.PUT(\"/projects/{projectName}/users/{userId}\", {\n params: {\n path: { projectName: ctx.projectName, userId: options.userId },\n },\n body,\n }),\n );\n if (Result.isFailure(updated)) return apiErrorFailure(updated.error);\n\n const value = updated.value;\n return Result.succeed({\n json: value,\n text: () =>\n renderDetail([\n [\"Updated\", value.id],\n [\"Name\", value.name],\n [\"Email\", value.email],\n [\"Group roles\", formatGroupRoles(value.groupRoles)],\n ]),\n });\n}\n\nconst updateArgs = {\n ...contextArgs,\n \"user-id\": {\n type: \"positional\",\n required: true,\n description: \"Project user ID\",\n },\n name: {\n type: \"string\",\n description: \"New display name\",\n },\n \"group-role\": {\n type: \"string\",\n description: \"Replace all RBAC assignments with <group>:<role>; repeatable\",\n },\n \"add-group-role\": {\n type: \"string\",\n description: \"Add an RBAC assignment as <group>:<role>; repeatable\",\n },\n \"remove-group-role\": {\n type: \"string\",\n description: \"Remove an RBAC assignment by group name; repeatable\",\n },\n \"clear-group-roles\": {\n type: \"boolean\",\n description: \"Remove all RBAC assignments\",\n default: false,\n },\n} satisfies ArgsDef;\n\nexport default defineCommand({\n meta: {\n name: \"update\",\n description: \"Update a project user's name or group roles\",\n },\n args: updateArgs,\n run: async ({ args, rawArgs }) => {\n const replace = parseGroupRoles(\n \"group-role\",\n collectRepeatableFlag(rawArgs, \"group-role\"),\n );\n if (Result.isFailure(replace)) return replace;\n const added = parseGroupRoles(\n \"add-group-role\",\n collectRepeatableFlag(rawArgs, \"add-group-role\"),\n );\n if (Result.isFailure(added)) return added;\n const removeValues = collectRepeatableFlag(rawArgs, \"remove-group-role\");\n const removed =\n removeValues === undefined\n ? Result.succeed(undefined)\n : parseRepeatableFlag(\"remove-group-role\", removeValues);\n if (Result.isFailure(removed)) return removed;\n const groupRoles = resolveArrayUpdate({\n replaceFlag: \"group-role\",\n clearFlag: \"clear-group-roles\",\n editFlags: \"--add-group-role / --remove-group-role\",\n replace: replace.value,\n add: added.value,\n remove: removed.value,\n clear: args[\"clear-group-roles\"] === true,\n });\n if (Result.isFailure(groupRoles)) return groupRoles;\n\n return runWithContext(args, (ctx) =>\n projectUserUpdateHandler(ctx, {\n userId: args[\"user-id\"],\n name: typeof args.name === \"string\" ? args.name : undefined,\n groupRoles: groupRoles.value,\n }),\n );\n },\n});\n"],"mappings":";;;;;;;;;;AAsBA,eAAsB,yBACpB,KACA,SAKmE;CACnE,IAAI,QAAQ,SAAS,UAAa,QAAQ,eAAe,QACvD,OAAOA,uBAAO,KAAK,EACjB,SAAS,2DACX,CAAC;CAIH,IAAI;CACJ,IAAI,QAAQ,YAAY,SAAS,QAAQ;EACvC,MAAM,UAAUC,kCACd,MAAM,IAAI,OAAO,IAAI,0CAA0C,EAC7D,QAAQ,EACN,MAAM;GAAE,aAAa,IAAI;GAAa,QAAQ,QAAQ;EAAO,EAC/D,EACF,CAAC,CACH;EACA,IAAID,uBAAO,UAAU,OAAO,GAAG,OAAOE,yCAAgB,QAAQ,KAAK;EACnE,6CACE,QAAQ,MAAM,YACd,QAAQ,WAAW,MACrB;EACA,aAAaC,wCACX,QAAQ,MAAM,YACd,QAAQ,UACV;CACF,OAAO,IAAI,QAAQ,eAAe,QAChC,aAAa,QAAQ,WAAW;CAGlC,MAAM,OAAO;EACX,GAAI,QAAQ,SAAS,SAAY,EAAE,MAAM,QAAQ,KAAK,IAAI,CAAC;EAC3D,GAAI,eAAe,SAAY,EAAE,WAAW,IAAI,CAAC;CACnD;CAEA,MAAM,UAAUF,kCACd,MAAM,IAAI,OAAO,IAAI,0CAA0C;EAC7D,QAAQ,EACN,MAAM;GAAE,aAAa,IAAI;GAAa,QAAQ,QAAQ;EAAO,EAC/D;EACA;CACF,CAAC,CACH;CACA,IAAID,uBAAO,UAAU,OAAO,GAAG,OAAOE,yCAAgB,QAAQ,KAAK;CAEnE,MAAM,QAAQ,QAAQ;CACtB,OAAOF,uBAAO,QAAQ;EACpB,MAAM;EACN,YACEI,4BAAa;GACX,CAAC,WAAW,MAAM,EAAE;GACpB,CAAC,QAAQ,MAAM,IAAI;GACnB,CAAC,SAAS,MAAM,KAAK;GACrB,CAAC,eAAeC,qCAAiB,MAAM,UAAU,CAAC;EACpD,CAAC;CACL,CAAC;AACH;AAEA,MAAM,aAAa;CACjB,GAAGC;CACH,WAAW;EACT,MAAM;EACN,UAAU;EACV,aAAa;CACf;CACA,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,cAAc;EACZ,MAAM;EACN,aAAa;CACf;CACA,kBAAkB;EAChB,MAAM;EACN,aAAa;CACf;CACA,qBAAqB;EACnB,MAAM;EACN,aAAa;CACf;CACA,qBAAqB;EACnB,MAAM;EACN,aAAa;EACb,SAAS;CACX;AACF;AAEA,qBAAeC,+BAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,MAAM;CACN,KAAK,OAAO,EAAE,MAAM,cAAc;EAChC,MAAM,UAAUC,oCACd,cACAC,oCAAsB,SAAS,YAAY,CAC7C;EACA,IAAIT,uBAAO,UAAU,OAAO,GAAG,OAAO;EACtC,MAAM,QAAQQ,oCACZ,kBACAC,oCAAsB,SAAS,gBAAgB,CACjD;EACA,IAAIT,uBAAO,UAAU,KAAK,GAAG,OAAO;EACpC,MAAM,eAAeS,oCAAsB,SAAS,mBAAmB;EACvE,MAAM,UACJ,iBAAiB,SACbT,uBAAO,QAAQ,MAAS,IACxBU,kCAAoB,qBAAqB,YAAY;EAC3D,IAAIV,uBAAO,UAAU,OAAO,GAAG,OAAO;EACtC,MAAM,aAAaW,wCAAmB;GACpC,aAAa;GACb,WAAW;GACX,WAAW;GACX,SAAS,QAAQ;GACjB,KAAK,MAAM;GACX,QAAQ,QAAQ;GAChB,OAAO,KAAK,yBAAyB;EACvC,CAAC;EACD,IAAIX,uBAAO,UAAU,UAAU,GAAG,OAAO;EAEzC,OAAOY,wCAAe,OAAO,QAC3B,yBAAyB,KAAK;GAC5B,QAAQ,KAAK;GACb,MAAM,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO;GAClD,YAAY,WAAW;EACzB,CAAC,CACH;CACF;AACF,CAAC"}
1
+ {"version":3,"file":"update-Dne7g_0s.cjs","names":["Result","toResult","apiErrorFailure","applyGroupRoleEdits","renderDetail","formatGroupRoles","contextArgs","defineCommand","parseGroupRoles","collectRepeatableFlag","parseRepeatableFlag","resolveArrayUpdate","runWithContext"],"sources":["../src/cli/commands/project-user/update.ts"],"sourcesContent":["import type { ArgsDef } from \"citty\";\nimport { Result } from \"@praha/byethrow\";\nimport {\n defineCommand,\n type CommandFailure,\n type CommandOutput,\n} from \"../define-command.js\";\nimport { contextArgs } from \"../shared.js\";\nimport { runWithContext, type CommandContext } from \"../run-with-context.js\";\nimport { apiErrorFailure } from \"../api-errors.js\";\nimport { toResult } from \"../../api/errors.js\";\nimport { renderDetail } from \"../../ui/detail.js\";\nimport { collectRepeatableFlag, parseRepeatableFlag } from \"../parse.js\";\nimport { resolveArrayUpdate, type ArrayUpdate } from \"../array-update.js\";\nimport {\n applyGroupRoleEdits,\n formatGroupRoles,\n warnMissingGroupRemovals,\n parseGroupRoles,\n type GroupRole,\n} from \"../group-roles.js\";\n\nexport async function projectUserUpdateHandler(\n ctx: CommandContext,\n options: {\n userId: string;\n name?: string;\n groupRoles: ArrayUpdate<GroupRole, string>;\n },\n): Promise<Result.Result<CommandOutput | undefined, CommandFailure>> {\n if (options.name === undefined && options.groupRoles === undefined) {\n return Result.fail({\n message: \"Nothing to update. Pass --name or a --group-role option.\",\n });\n }\n\n // API は groupRoles の全置換しか受けないため、要素単位の編集は現状を取得してから組み立てる\n let groupRoles: GroupRole[] | undefined;\n if (options.groupRoles?.mode === \"edit\") {\n const current = toResult(\n await ctx.client.GET(\"/projects/{projectName}/users/{userId}\", {\n params: {\n path: { projectName: ctx.projectName, userId: options.userId },\n },\n }),\n );\n if (Result.isFailure(current)) return apiErrorFailure(current.error);\n warnMissingGroupRemovals(\n current.value.groupRoles,\n options.groupRoles.remove,\n );\n groupRoles = applyGroupRoleEdits(\n current.value.groupRoles,\n options.groupRoles,\n );\n } else if (options.groupRoles !== undefined) {\n groupRoles = options.groupRoles.items;\n }\n\n const body = {\n ...(options.name !== undefined ? { name: options.name } : {}),\n ...(groupRoles !== undefined ? { groupRoles } : {}),\n };\n\n const updated = toResult(\n await ctx.client.PUT(\"/projects/{projectName}/users/{userId}\", {\n params: {\n path: { projectName: ctx.projectName, userId: options.userId },\n },\n body,\n }),\n );\n if (Result.isFailure(updated)) return apiErrorFailure(updated.error);\n\n const value = updated.value;\n return Result.succeed({\n json: value,\n text: () =>\n renderDetail([\n [\"Updated\", value.id],\n [\"Name\", value.name],\n [\"Email\", value.email],\n [\"Group roles\", formatGroupRoles(value.groupRoles)],\n ]),\n });\n}\n\nconst updateArgs = {\n ...contextArgs,\n \"user-id\": {\n type: \"positional\",\n required: true,\n description: \"Project user ID\",\n },\n name: {\n type: \"string\",\n description: \"New display name\",\n },\n \"group-role\": {\n type: \"string\",\n description: \"Replace all RBAC assignments with <group>:<role>; repeatable\",\n },\n \"add-group-role\": {\n type: \"string\",\n description: \"Add an RBAC assignment as <group>:<role>; repeatable\",\n },\n \"remove-group-role\": {\n type: \"string\",\n description: \"Remove an RBAC assignment by group name; repeatable\",\n },\n \"clear-group-roles\": {\n type: \"boolean\",\n description: \"Remove all RBAC assignments\",\n default: false,\n },\n} satisfies ArgsDef;\n\nexport default defineCommand({\n meta: {\n name: \"update\",\n description: \"Update a project user's name or group roles\",\n },\n args: updateArgs,\n run: async ({ args, rawArgs }) => {\n const replace = parseGroupRoles(\n \"group-role\",\n collectRepeatableFlag(rawArgs, \"group-role\"),\n );\n if (Result.isFailure(replace)) return replace;\n const added = parseGroupRoles(\n \"add-group-role\",\n collectRepeatableFlag(rawArgs, \"add-group-role\"),\n );\n if (Result.isFailure(added)) return added;\n const removeValues = collectRepeatableFlag(rawArgs, \"remove-group-role\");\n const removed =\n removeValues === undefined\n ? Result.succeed(undefined)\n : parseRepeatableFlag(\"remove-group-role\", removeValues);\n if (Result.isFailure(removed)) return removed;\n const groupRoles = resolveArrayUpdate({\n replaceFlag: \"group-role\",\n clearFlag: \"clear-group-roles\",\n editFlags: \"--add-group-role / --remove-group-role\",\n replace: replace.value,\n add: added.value,\n remove: removed.value,\n clear: args[\"clear-group-roles\"] === true,\n });\n if (Result.isFailure(groupRoles)) return groupRoles;\n\n return runWithContext(args, (ctx) =>\n projectUserUpdateHandler(ctx, {\n userId: args[\"user-id\"],\n name: typeof args.name === \"string\" ? args.name : undefined,\n groupRoles: groupRoles.value,\n }),\n );\n },\n});\n"],"mappings":";;;;;;;;;;AAsBA,eAAsB,yBACpB,KACA,SAKmE;CACnE,IAAI,QAAQ,SAAS,UAAa,QAAQ,eAAe,QACvD,OAAOA,uBAAO,KAAK,EACjB,SAAS,2DACX,CAAC;CAIH,IAAI;CACJ,IAAI,QAAQ,YAAY,SAAS,QAAQ;EACvC,MAAM,UAAUC,kCACd,MAAM,IAAI,OAAO,IAAI,0CAA0C,EAC7D,QAAQ,EACN,MAAM;GAAE,aAAa,IAAI;GAAa,QAAQ,QAAQ;EAAO,EAC/D,EACF,CAAC,CACH;EACA,IAAID,uBAAO,UAAU,OAAO,GAAG,OAAOE,yCAAgB,QAAQ,KAAK;EACnE,6CACE,QAAQ,MAAM,YACd,QAAQ,WAAW,MACrB;EACA,aAAaC,wCACX,QAAQ,MAAM,YACd,QAAQ,UACV;CACF,OAAO,IAAI,QAAQ,eAAe,QAChC,aAAa,QAAQ,WAAW;CAGlC,MAAM,OAAO;EACX,GAAI,QAAQ,SAAS,SAAY,EAAE,MAAM,QAAQ,KAAK,IAAI,CAAC;EAC3D,GAAI,eAAe,SAAY,EAAE,WAAW,IAAI,CAAC;CACnD;CAEA,MAAM,UAAUF,kCACd,MAAM,IAAI,OAAO,IAAI,0CAA0C;EAC7D,QAAQ,EACN,MAAM;GAAE,aAAa,IAAI;GAAa,QAAQ,QAAQ;EAAO,EAC/D;EACA;CACF,CAAC,CACH;CACA,IAAID,uBAAO,UAAU,OAAO,GAAG,OAAOE,yCAAgB,QAAQ,KAAK;CAEnE,MAAM,QAAQ,QAAQ;CACtB,OAAOF,uBAAO,QAAQ;EACpB,MAAM;EACN,YACEI,4BAAa;GACX,CAAC,WAAW,MAAM,EAAE;GACpB,CAAC,QAAQ,MAAM,IAAI;GACnB,CAAC,SAAS,MAAM,KAAK;GACrB,CAAC,eAAeC,qCAAiB,MAAM,UAAU,CAAC;EACpD,CAAC;CACL,CAAC;AACH;AAEA,MAAM,aAAa;CACjB,GAAGC;CACH,WAAW;EACT,MAAM;EACN,UAAU;EACV,aAAa;CACf;CACA,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,cAAc;EACZ,MAAM;EACN,aAAa;CACf;CACA,kBAAkB;EAChB,MAAM;EACN,aAAa;CACf;CACA,qBAAqB;EACnB,MAAM;EACN,aAAa;CACf;CACA,qBAAqB;EACnB,MAAM;EACN,aAAa;EACb,SAAS;CACX;AACF;AAEA,qBAAeC,+BAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,MAAM;CACN,KAAK,OAAO,EAAE,MAAM,cAAc;EAChC,MAAM,UAAUC,oCACd,cACAC,oCAAsB,SAAS,YAAY,CAC7C;EACA,IAAIT,uBAAO,UAAU,OAAO,GAAG,OAAO;EACtC,MAAM,QAAQQ,oCACZ,kBACAC,oCAAsB,SAAS,gBAAgB,CACjD;EACA,IAAIT,uBAAO,UAAU,KAAK,GAAG,OAAO;EACpC,MAAM,eAAeS,oCAAsB,SAAS,mBAAmB;EACvE,MAAM,UACJ,iBAAiB,SACbT,uBAAO,QAAQ,MAAS,IACxBU,kCAAoB,qBAAqB,YAAY;EAC3D,IAAIV,uBAAO,UAAU,OAAO,GAAG,OAAO;EACtC,MAAM,aAAaW,wCAAmB;GACpC,aAAa;GACb,WAAW;GACX,WAAW;GACX,SAAS,QAAQ;GACjB,KAAK,MAAM;GACX,QAAQ,QAAQ;GAChB,OAAO,KAAK,yBAAyB;EACvC,CAAC;EACD,IAAIX,uBAAO,UAAU,UAAU,GAAG,OAAO;EAEzC,OAAOY,wCAAe,OAAO,QAC3B,yBAAyB,KAAK;GAC5B,QAAQ,KAAK;GACb,MAAM,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO;GAClD,YAAY,WAAW;EACzB,CAAC,CACH;CACF;AACF,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { t as defineCommand } from "./cli/main.mjs";
2
2
  import { r as contextArgs } from "./shared-CZZimGxc.mjs";
3
- import { a as apiErrorFailure, n as runWithContext, u as toResult } from "./run-with-context-CVhmzAFZ.mjs";
3
+ import { a as apiErrorFailure, c as toResult, n as runWithContext } from "./run-with-context-B4DyI8Wo.mjs";
4
4
  import { t as renderDetail } from "./detail-DN5jCQ4N.mjs";
5
5
  import { f as parseRepeatableFlag, t as collectRepeatableFlag, u as parsePositionalId } from "./parse-DA0k5AHa.mjs";
6
6
  import { n as maskManagementKey, r as showKeyArg } from "./mask-B1qD73jb.mjs";
@@ -114,4 +114,4 @@ var update_default = defineCommand({
114
114
 
115
115
  //#endregion
116
116
  export { update_default as default };
117
- //# sourceMappingURL=update-CQ4n4Xuf.mjs.map
117
+ //# sourceMappingURL=update-Dy1BOnTB.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"update-CQ4n4Xuf.mjs","names":[],"sources":["../src/cli/commands/key/management/update.ts"],"sourcesContent":["import type { ArgsDef } from \"citty\";\nimport { Result } from \"@praha/byethrow\";\nimport {\n defineCommand,\n type CommandFailure,\n type CommandOutput,\n} from \"../../define-command.js\";\nimport { contextArgs } from \"../../shared.js\";\nimport { runWithContext, type CommandContext } from \"../../run-with-context.js\";\nimport { apiErrorFailure } from \"../../api-errors.js\";\nimport { toResult } from \"../../../api/errors.js\";\nimport { renderDetail } from \"../../../ui/detail.js\";\nimport {\n collectRepeatableFlag,\n parsePositionalId,\n parseRepeatableFlag,\n} from \"../../parse.js\";\nimport { resolveArrayUpdate, type ArrayUpdate } from \"../../array-update.js\";\nimport {\n applyGroupRoleEdits,\n formatGroupRoles,\n warnMissingGroupRemovals,\n parseGroupRoles,\n type GroupRole,\n} from \"../../group-roles.js\";\nimport { maskManagementKey, showKeyArg } from \"../mask.js\";\n\nexport async function keyManagementUpdateHandler(\n ctx: CommandContext,\n options: {\n id: number;\n description?: string;\n groupRoles: ArrayUpdate<GroupRole, string>;\n showKey: boolean;\n },\n): Promise<Result.Result<CommandOutput | undefined, CommandFailure>> {\n if (options.description === undefined && options.groupRoles === undefined) {\n return Result.fail({\n message:\n \"Nothing to update. Pass --description or a --group-role option.\",\n });\n }\n\n // API は groupRoles の全置換しか受けないため、要素単位の編集は現状を取得してから組み立てる。\n // Management Key には単体 GET が無いので一覧から引く。\n let groupRoles: GroupRole[] | undefined;\n if (options.groupRoles?.mode === \"edit\") {\n const keys = toResult(\n await ctx.client.GET(\"/projects/{projectName}/management-keys\", {\n params: { path: { projectName: ctx.projectName } },\n }),\n );\n if (Result.isFailure(keys)) return apiErrorFailure(keys.error);\n const current = keys.value.find((key) => key.id === options.id);\n if (current === undefined) {\n return Result.fail({\n message: `Not found: management key ${options.id}.`,\n });\n }\n warnMissingGroupRemovals(current.groupRoles, options.groupRoles.remove);\n groupRoles = applyGroupRoleEdits(current.groupRoles, options.groupRoles);\n } else if (options.groupRoles !== undefined) {\n groupRoles = options.groupRoles.items;\n }\n\n const body = {\n ...(options.description !== undefined\n ? { description: options.description }\n : {}),\n ...(groupRoles !== undefined ? { groupRoles } : {}),\n };\n\n const updated = toResult(\n await ctx.client.PUT(\n \"/projects/{projectName}/management-keys/{projectManagementKeyId}\",\n {\n params: {\n path: {\n projectName: ctx.projectName,\n projectManagementKeyId: options.id,\n },\n },\n body,\n },\n ),\n );\n if (Result.isFailure(updated)) return apiErrorFailure(updated.error);\n\n // --json でもマスクを効かせるため、表示用データ自体を書き換える\n const value = options.showKey\n ? updated.value\n : { ...updated.value, key: maskManagementKey(updated.value.key) };\n return Result.succeed({\n json: value,\n text: () =>\n renderDetail([\n [\"ID\", String(value.id)],\n [\"Key\", value.key],\n [\"Description\", value.description],\n [\"Group roles\", formatGroupRoles(value.groupRoles)],\n [\"Updated at\", value.updatedAt],\n ]),\n });\n}\n\nconst updateArgs = {\n ...contextArgs,\n ...showKeyArg,\n id: {\n type: \"positional\",\n required: true,\n description: \"Numeric management key ID\",\n },\n description: {\n type: \"string\",\n description: \"New description\",\n },\n \"group-role\": {\n type: \"string\",\n description: \"Replace all RBAC assignments with <group>:<role>; repeatable\",\n },\n \"add-group-role\": {\n type: \"string\",\n description: \"Add an RBAC assignment as <group>:<role>; repeatable\",\n },\n \"remove-group-role\": {\n type: \"string\",\n description: \"Remove an RBAC assignment by group name; repeatable\",\n },\n \"clear-group-roles\": {\n type: \"boolean\",\n description: \"Remove all RBAC assignments\",\n default: false,\n },\n} satisfies ArgsDef;\n\nexport default defineCommand({\n meta: {\n name: \"update\",\n description: \"Update a management key's description or group roles\",\n },\n args: updateArgs,\n run: async ({ args, rawArgs }) => {\n const id = parsePositionalId(\"management key ID\", args.id);\n if (Result.isFailure(id)) return id;\n const replace = parseGroupRoles(\n \"group-role\",\n collectRepeatableFlag(rawArgs, \"group-role\"),\n );\n if (Result.isFailure(replace)) return replace;\n const added = parseGroupRoles(\n \"add-group-role\",\n collectRepeatableFlag(rawArgs, \"add-group-role\"),\n );\n if (Result.isFailure(added)) return added;\n const removeValues = collectRepeatableFlag(rawArgs, \"remove-group-role\");\n const removed =\n removeValues === undefined\n ? Result.succeed(undefined)\n : parseRepeatableFlag(\"remove-group-role\", removeValues);\n if (Result.isFailure(removed)) return removed;\n const groupRoles = resolveArrayUpdate({\n replaceFlag: \"group-role\",\n clearFlag: \"clear-group-roles\",\n editFlags: \"--add-group-role / --remove-group-role\",\n replace: replace.value,\n add: added.value,\n remove: removed.value,\n clear: args[\"clear-group-roles\"] === true,\n });\n if (Result.isFailure(groupRoles)) return groupRoles;\n\n return runWithContext(args, (ctx) =>\n keyManagementUpdateHandler(ctx, {\n id: id.value,\n description:\n typeof args.description === \"string\" ? args.description : undefined,\n groupRoles: groupRoles.value,\n showKey: args[\"show-key\"] === true,\n }),\n );\n },\n});\n"],"mappings":";;;;;;;;;;;AA2BA,eAAsB,2BACpB,KACA,SAMmE;CACnE,IAAI,QAAQ,gBAAgB,UAAa,QAAQ,eAAe,QAC9D,OAAO,OAAO,KAAK,EACjB,SACE,kEACJ,CAAC;CAKH,IAAI;CACJ,IAAI,QAAQ,YAAY,SAAS,QAAQ;EACvC,MAAM,OAAO,SACX,MAAM,IAAI,OAAO,IAAI,2CAA2C,EAC9D,QAAQ,EAAE,MAAM,EAAE,aAAa,IAAI,YAAY,EAAE,EACnD,CAAC,CACH;EACA,IAAI,OAAO,UAAU,IAAI,GAAG,OAAO,gBAAgB,KAAK,KAAK;EAC7D,MAAM,UAAU,KAAK,MAAM,MAAM,QAAQ,IAAI,OAAO,QAAQ,EAAE;EAC9D,IAAI,YAAY,QACd,OAAO,OAAO,KAAK,EACjB,SAAS,6BAA6B,QAAQ,GAAG,GACnD,CAAC;EAEH,yBAAyB,QAAQ,YAAY,QAAQ,WAAW,MAAM;EACtE,aAAa,oBAAoB,QAAQ,YAAY,QAAQ,UAAU;CACzE,OAAO,IAAI,QAAQ,eAAe,QAChC,aAAa,QAAQ,WAAW;CAGlC,MAAM,OAAO;EACX,GAAI,QAAQ,gBAAgB,SACxB,EAAE,aAAa,QAAQ,YAAY,IACnC,CAAC;EACL,GAAI,eAAe,SAAY,EAAE,WAAW,IAAI,CAAC;CACnD;CAEA,MAAM,UAAU,SACd,MAAM,IAAI,OAAO,IACf,oEACA;EACE,QAAQ,EACN,MAAM;GACJ,aAAa,IAAI;GACjB,wBAAwB,QAAQ;EAClC,EACF;EACA;CACF,CACF,CACF;CACA,IAAI,OAAO,UAAU,OAAO,GAAG,OAAO,gBAAgB,QAAQ,KAAK;CAGnE,MAAM,QAAQ,QAAQ,UAClB,QAAQ,QACR;EAAE,GAAG,QAAQ;EAAO,KAAK,kBAAkB,QAAQ,MAAM,GAAG;CAAE;CAClE,OAAO,OAAO,QAAQ;EACpB,MAAM;EACN,YACE,aAAa;GACX,CAAC,MAAM,OAAO,MAAM,EAAE,CAAC;GACvB,CAAC,OAAO,MAAM,GAAG;GACjB,CAAC,eAAe,MAAM,WAAW;GACjC,CAAC,eAAe,iBAAiB,MAAM,UAAU,CAAC;GAClD,CAAC,cAAc,MAAM,SAAS;EAChC,CAAC;CACL,CAAC;AACH;AAEA,MAAM,aAAa;CACjB,GAAG;CACH,GAAG;CACH,IAAI;EACF,MAAM;EACN,UAAU;EACV,aAAa;CACf;CACA,aAAa;EACX,MAAM;EACN,aAAa;CACf;CACA,cAAc;EACZ,MAAM;EACN,aAAa;CACf;CACA,kBAAkB;EAChB,MAAM;EACN,aAAa;CACf;CACA,qBAAqB;EACnB,MAAM;EACN,aAAa;CACf;CACA,qBAAqB;EACnB,MAAM;EACN,aAAa;EACb,SAAS;CACX;AACF;AAEA,qBAAe,cAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,MAAM;CACN,KAAK,OAAO,EAAE,MAAM,cAAc;EAChC,MAAM,KAAK,kBAAkB,qBAAqB,KAAK,EAAE;EACzD,IAAI,OAAO,UAAU,EAAE,GAAG,OAAO;EACjC,MAAM,UAAU,gBACd,cACA,sBAAsB,SAAS,YAAY,CAC7C;EACA,IAAI,OAAO,UAAU,OAAO,GAAG,OAAO;EACtC,MAAM,QAAQ,gBACZ,kBACA,sBAAsB,SAAS,gBAAgB,CACjD;EACA,IAAI,OAAO,UAAU,KAAK,GAAG,OAAO;EACpC,MAAM,eAAe,sBAAsB,SAAS,mBAAmB;EACvE,MAAM,UACJ,iBAAiB,SACb,OAAO,QAAQ,MAAS,IACxB,oBAAoB,qBAAqB,YAAY;EAC3D,IAAI,OAAO,UAAU,OAAO,GAAG,OAAO;EACtC,MAAM,aAAa,mBAAmB;GACpC,aAAa;GACb,WAAW;GACX,WAAW;GACX,SAAS,QAAQ;GACjB,KAAK,MAAM;GACX,QAAQ,QAAQ;GAChB,OAAO,KAAK,yBAAyB;EACvC,CAAC;EACD,IAAI,OAAO,UAAU,UAAU,GAAG,OAAO;EAEzC,OAAO,eAAe,OAAO,QAC3B,2BAA2B,KAAK;GAC9B,IAAI,GAAG;GACP,aACE,OAAO,KAAK,gBAAgB,WAAW,KAAK,cAAc;GAC5D,YAAY,WAAW;GACvB,SAAS,KAAK,gBAAgB;EAChC,CAAC,CACH;CACF;AACF,CAAC"}
1
+ {"version":3,"file":"update-Dy1BOnTB.mjs","names":[],"sources":["../src/cli/commands/key/management/update.ts"],"sourcesContent":["import type { ArgsDef } from \"citty\";\nimport { Result } from \"@praha/byethrow\";\nimport {\n defineCommand,\n type CommandFailure,\n type CommandOutput,\n} from \"../../define-command.js\";\nimport { contextArgs } from \"../../shared.js\";\nimport { runWithContext, type CommandContext } from \"../../run-with-context.js\";\nimport { apiErrorFailure } from \"../../api-errors.js\";\nimport { toResult } from \"../../../api/errors.js\";\nimport { renderDetail } from \"../../../ui/detail.js\";\nimport {\n collectRepeatableFlag,\n parsePositionalId,\n parseRepeatableFlag,\n} from \"../../parse.js\";\nimport { resolveArrayUpdate, type ArrayUpdate } from \"../../array-update.js\";\nimport {\n applyGroupRoleEdits,\n formatGroupRoles,\n warnMissingGroupRemovals,\n parseGroupRoles,\n type GroupRole,\n} from \"../../group-roles.js\";\nimport { maskManagementKey, showKeyArg } from \"../mask.js\";\n\nexport async function keyManagementUpdateHandler(\n ctx: CommandContext,\n options: {\n id: number;\n description?: string;\n groupRoles: ArrayUpdate<GroupRole, string>;\n showKey: boolean;\n },\n): Promise<Result.Result<CommandOutput | undefined, CommandFailure>> {\n if (options.description === undefined && options.groupRoles === undefined) {\n return Result.fail({\n message:\n \"Nothing to update. Pass --description or a --group-role option.\",\n });\n }\n\n // API は groupRoles の全置換しか受けないため、要素単位の編集は現状を取得してから組み立てる。\n // Management Key には単体 GET が無いので一覧から引く。\n let groupRoles: GroupRole[] | undefined;\n if (options.groupRoles?.mode === \"edit\") {\n const keys = toResult(\n await ctx.client.GET(\"/projects/{projectName}/management-keys\", {\n params: { path: { projectName: ctx.projectName } },\n }),\n );\n if (Result.isFailure(keys)) return apiErrorFailure(keys.error);\n const current = keys.value.find((key) => key.id === options.id);\n if (current === undefined) {\n return Result.fail({\n message: `Not found: management key ${options.id}.`,\n });\n }\n warnMissingGroupRemovals(current.groupRoles, options.groupRoles.remove);\n groupRoles = applyGroupRoleEdits(current.groupRoles, options.groupRoles);\n } else if (options.groupRoles !== undefined) {\n groupRoles = options.groupRoles.items;\n }\n\n const body = {\n ...(options.description !== undefined\n ? { description: options.description }\n : {}),\n ...(groupRoles !== undefined ? { groupRoles } : {}),\n };\n\n const updated = toResult(\n await ctx.client.PUT(\n \"/projects/{projectName}/management-keys/{projectManagementKeyId}\",\n {\n params: {\n path: {\n projectName: ctx.projectName,\n projectManagementKeyId: options.id,\n },\n },\n body,\n },\n ),\n );\n if (Result.isFailure(updated)) return apiErrorFailure(updated.error);\n\n // --json でもマスクを効かせるため、表示用データ自体を書き換える\n const value = options.showKey\n ? updated.value\n : { ...updated.value, key: maskManagementKey(updated.value.key) };\n return Result.succeed({\n json: value,\n text: () =>\n renderDetail([\n [\"ID\", String(value.id)],\n [\"Key\", value.key],\n [\"Description\", value.description],\n [\"Group roles\", formatGroupRoles(value.groupRoles)],\n [\"Updated at\", value.updatedAt],\n ]),\n });\n}\n\nconst updateArgs = {\n ...contextArgs,\n ...showKeyArg,\n id: {\n type: \"positional\",\n required: true,\n description: \"Numeric management key ID\",\n },\n description: {\n type: \"string\",\n description: \"New description\",\n },\n \"group-role\": {\n type: \"string\",\n description: \"Replace all RBAC assignments with <group>:<role>; repeatable\",\n },\n \"add-group-role\": {\n type: \"string\",\n description: \"Add an RBAC assignment as <group>:<role>; repeatable\",\n },\n \"remove-group-role\": {\n type: \"string\",\n description: \"Remove an RBAC assignment by group name; repeatable\",\n },\n \"clear-group-roles\": {\n type: \"boolean\",\n description: \"Remove all RBAC assignments\",\n default: false,\n },\n} satisfies ArgsDef;\n\nexport default defineCommand({\n meta: {\n name: \"update\",\n description: \"Update a management key's description or group roles\",\n },\n args: updateArgs,\n run: async ({ args, rawArgs }) => {\n const id = parsePositionalId(\"management key ID\", args.id);\n if (Result.isFailure(id)) return id;\n const replace = parseGroupRoles(\n \"group-role\",\n collectRepeatableFlag(rawArgs, \"group-role\"),\n );\n if (Result.isFailure(replace)) return replace;\n const added = parseGroupRoles(\n \"add-group-role\",\n collectRepeatableFlag(rawArgs, \"add-group-role\"),\n );\n if (Result.isFailure(added)) return added;\n const removeValues = collectRepeatableFlag(rawArgs, \"remove-group-role\");\n const removed =\n removeValues === undefined\n ? Result.succeed(undefined)\n : parseRepeatableFlag(\"remove-group-role\", removeValues);\n if (Result.isFailure(removed)) return removed;\n const groupRoles = resolveArrayUpdate({\n replaceFlag: \"group-role\",\n clearFlag: \"clear-group-roles\",\n editFlags: \"--add-group-role / --remove-group-role\",\n replace: replace.value,\n add: added.value,\n remove: removed.value,\n clear: args[\"clear-group-roles\"] === true,\n });\n if (Result.isFailure(groupRoles)) return groupRoles;\n\n return runWithContext(args, (ctx) =>\n keyManagementUpdateHandler(ctx, {\n id: id.value,\n description:\n typeof args.description === \"string\" ? args.description : undefined,\n groupRoles: groupRoles.value,\n showKey: args[\"show-key\"] === true,\n }),\n );\n },\n});\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { t as defineCommand } from "./cli/main.mjs";
2
2
  import { r as contextArgs } from "./shared-CZZimGxc.mjs";
3
- import { a as apiErrorFailure, n as runWithContext, u as toResult } from "./run-with-context-CVhmzAFZ.mjs";
3
+ import { a as apiErrorFailure, c as toResult, n as runWithContext } from "./run-with-context-B4DyI8Wo.mjs";
4
4
  import { r as parseDataOption } from "./parse-DA0k5AHa.mjs";
5
5
  import { Result } from "@praha/byethrow";
6
6
 
@@ -58,4 +58,4 @@ var update_default = defineCommand({
58
58
 
59
59
  //#endregion
60
60
  export { update_default as default };
61
- //# sourceMappingURL=update-rzij1b_o.mjs.map
61
+ //# sourceMappingURL=update-slz_X0mG.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"update-rzij1b_o.mjs","names":[],"sources":["../src/cli/commands/content/update.ts"],"sourcesContent":["import type { ArgsDef } from \"citty\";\nimport { Result } from \"@praha/byethrow\";\nimport {\n defineCommand,\n type CommandFailure,\n type CommandOutput,\n} from \"../define-command.js\";\nimport { contextArgs } from \"../shared.js\";\nimport { runWithContext, type CommandContext } from \"../run-with-context.js\";\nimport { apiErrorFailure } from \"../api-errors.js\";\nimport { toResult } from \"../../api/errors.js\";\nimport { parseDataOption } from \"../parse.js\";\n\nexport async function contentUpdateHandler(\n ctx: CommandContext,\n options: { table: string; contentId: string; data: Record<string, unknown> },\n): Promise<Result.Result<CommandOutput | undefined, CommandFailure>> {\n const updated = toResult(\n await ctx.client.PUT(\n \"/projects/{projectName}/tables/{tableName}/{contentId}\",\n {\n params: {\n path: {\n projectName: ctx.projectName,\n tableName: options.table,\n contentId: options.contentId,\n },\n },\n body: options.data,\n },\n ),\n );\n if (Result.isFailure(updated)) return apiErrorFailure(updated.error);\n\n const value = updated.value;\n return Result.succeed({\n json: value,\n text: () => JSON.stringify(value, null, 2),\n });\n}\n\nconst updateArgs = {\n ...contextArgs,\n table: {\n type: \"positional\",\n required: true,\n description: \"Table name\",\n },\n id: {\n type: \"positional\",\n required: true,\n description: \"Content ID\",\n },\n data: {\n type: \"string\",\n required: true,\n description: \"Content fields as a JSON object string or @path/to/file.json\",\n },\n} satisfies ArgsDef;\n\nexport default defineCommand({\n meta: {\n name: \"update\",\n description: \"Update a content\",\n },\n args: updateArgs,\n run: async ({ args }) => {\n const data = await parseDataOption(args.data);\n if (Result.isFailure(data)) return data;\n\n return runWithContext(args, (ctx) =>\n contentUpdateHandler(ctx, {\n table: args.table,\n contentId: args.id,\n data: data.value,\n }),\n );\n },\n});\n"],"mappings":";;;;;;;AAaA,eAAsB,qBACpB,KACA,SACmE;CACnE,MAAM,UAAU,SACd,MAAM,IAAI,OAAO,IACf,0DACA;EACE,QAAQ,EACN,MAAM;GACJ,aAAa,IAAI;GACjB,WAAW,QAAQ;GACnB,WAAW,QAAQ;EACrB,EACF;EACA,MAAM,QAAQ;CAChB,CACF,CACF;CACA,IAAI,OAAO,UAAU,OAAO,GAAG,OAAO,gBAAgB,QAAQ,KAAK;CAEnE,MAAM,QAAQ,QAAQ;CACtB,OAAO,OAAO,QAAQ;EACpB,MAAM;EACN,YAAY,KAAK,UAAU,OAAO,MAAM,CAAC;CAC3C,CAAC;AACH;AAEA,MAAM,aAAa;CACjB,GAAG;CACH,OAAO;EACL,MAAM;EACN,UAAU;EACV,aAAa;CACf;CACA,IAAI;EACF,MAAM;EACN,UAAU;EACV,aAAa;CACf;CACA,MAAM;EACJ,MAAM;EACN,UAAU;EACV,aAAa;CACf;AACF;AAEA,qBAAe,cAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,MAAM;CACN,KAAK,OAAO,EAAE,WAAW;EACvB,MAAM,OAAO,MAAM,gBAAgB,KAAK,IAAI;EAC5C,IAAI,OAAO,UAAU,IAAI,GAAG,OAAO;EAEnC,OAAO,eAAe,OAAO,QAC3B,qBAAqB,KAAK;GACxB,OAAO,KAAK;GACZ,WAAW,KAAK;GAChB,MAAM,KAAK;EACb,CAAC,CACH;CACF;AACF,CAAC"}
1
+ {"version":3,"file":"update-slz_X0mG.mjs","names":[],"sources":["../src/cli/commands/content/update.ts"],"sourcesContent":["import type { ArgsDef } from \"citty\";\nimport { Result } from \"@praha/byethrow\";\nimport {\n defineCommand,\n type CommandFailure,\n type CommandOutput,\n} from \"../define-command.js\";\nimport { contextArgs } from \"../shared.js\";\nimport { runWithContext, type CommandContext } from \"../run-with-context.js\";\nimport { apiErrorFailure } from \"../api-errors.js\";\nimport { toResult } from \"../../api/errors.js\";\nimport { parseDataOption } from \"../parse.js\";\n\nexport async function contentUpdateHandler(\n ctx: CommandContext,\n options: { table: string; contentId: string; data: Record<string, unknown> },\n): Promise<Result.Result<CommandOutput | undefined, CommandFailure>> {\n const updated = toResult(\n await ctx.client.PUT(\n \"/projects/{projectName}/tables/{tableName}/{contentId}\",\n {\n params: {\n path: {\n projectName: ctx.projectName,\n tableName: options.table,\n contentId: options.contentId,\n },\n },\n body: options.data,\n },\n ),\n );\n if (Result.isFailure(updated)) return apiErrorFailure(updated.error);\n\n const value = updated.value;\n return Result.succeed({\n json: value,\n text: () => JSON.stringify(value, null, 2),\n });\n}\n\nconst updateArgs = {\n ...contextArgs,\n table: {\n type: \"positional\",\n required: true,\n description: \"Table name\",\n },\n id: {\n type: \"positional\",\n required: true,\n description: \"Content ID\",\n },\n data: {\n type: \"string\",\n required: true,\n description: \"Content fields as a JSON object string or @path/to/file.json\",\n },\n} satisfies ArgsDef;\n\nexport default defineCommand({\n meta: {\n name: \"update\",\n description: \"Update a content\",\n },\n args: updateArgs,\n run: async ({ args }) => {\n const data = await parseDataOption(args.data);\n if (Result.isFailure(data)) return data;\n\n return runWithContext(args, (ctx) =>\n contentUpdateHandler(ctx, {\n table: args.table,\n contentId: args.id,\n data: data.value,\n }),\n );\n },\n});\n"],"mappings":";;;;;;;AAaA,eAAsB,qBACpB,KACA,SACmE;CACnE,MAAM,UAAU,SACd,MAAM,IAAI,OAAO,IACf,0DACA;EACE,QAAQ,EACN,MAAM;GACJ,aAAa,IAAI;GACjB,WAAW,QAAQ;GACnB,WAAW,QAAQ;EACrB,EACF;EACA,MAAM,QAAQ;CAChB,CACF,CACF;CACA,IAAI,OAAO,UAAU,OAAO,GAAG,OAAO,gBAAgB,QAAQ,KAAK;CAEnE,MAAM,QAAQ,QAAQ;CACtB,OAAO,OAAO,QAAQ;EACpB,MAAM;EACN,YAAY,KAAK,UAAU,OAAO,MAAM,CAAC;CAC3C,CAAC;AACH;AAEA,MAAM,aAAa;CACjB,GAAG;CACH,OAAO;EACL,MAAM;EACN,UAAU;EACV,aAAa;CACf;CACA,IAAI;EACF,MAAM;EACN,UAAU;EACV,aAAa;CACf;CACA,MAAM;EACJ,MAAM;EACN,UAAU;EACV,aAAa;CACf;AACF;AAEA,qBAAe,cAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,MAAM;CACN,KAAK,OAAO,EAAE,WAAW;EACvB,MAAM,OAAO,MAAM,gBAAgB,KAAK,IAAI;EAC5C,IAAI,OAAO,UAAU,IAAI,GAAG,OAAO;EAEnC,OAAO,eAAe,OAAO,QAC3B,qBAAqB,KAAK;GACxB,OAAO,KAAK;GACZ,WAAW,KAAK;GAChB,MAAM,KAAK;EACb,CAAC,CACH;CACF;AACF,CAAC"}
@@ -1,10 +1,10 @@
1
1
  import { t as defineCommand } from "./cli/main.mjs";
2
2
  import { r as contextArgs } from "./shared-CZZimGxc.mjs";
3
- import { a as apiErrorFailure, n as runWithContext, u as toResult } from "./run-with-context-CVhmzAFZ.mjs";
3
+ import { a as apiErrorFailure, c as toResult, n as runWithContext } from "./run-with-context-B4DyI8Wo.mjs";
4
4
  import { t as renderDetail } from "./detail-DN5jCQ4N.mjs";
5
5
  import { Result } from "@praha/byethrow";
6
- import { readFile } from "node:fs/promises";
7
6
  import { basename } from "node:path";
7
+ import { readFile } from "node:fs/promises";
8
8
  import mimeTypes from "mime-types";
9
9
 
10
10
  //#region src/cli/api/multipart.ts
@@ -91,4 +91,4 @@ var upload_default = defineCommand({
91
91
 
92
92
  //#endregion
93
93
  export { upload_default as default };
94
- //# sourceMappingURL=upload-DGgJ1TQk.mjs.map
94
+ //# sourceMappingURL=upload-CDtzV9Wx.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"upload-DGgJ1TQk.mjs","names":[],"sources":["../src/cli/api/multipart.ts","../src/cli/commands/bucket/object/mime.ts","../src/cli/commands/bucket/object/upload.ts"],"sourcesContent":["// openapi-fetch のデフォルト serializer は JSON 前提のため、multipart/form-data はこの serializer を明示指定する。\nexport function multipartBodySerializer(\n body: Record<string, string | File | undefined>,\n): FormData {\n const formData = new FormData();\n for (const [key, value] of Object.entries(body)) {\n if (value === undefined) continue;\n formData.append(key, value);\n }\n return formData;\n}\n","import mimeTypes from \"mime-types\";\n\n// Node で readFile したバイト列を File に包むだけでは type が空になり、サーバーが\n// type を保存できず画像の width/height 抽出(image/ 判定)も働かないため、拡張子から申告する。\nexport function mimeTypeFromFilename(filename: string): string | undefined {\n const mimeType = mimeTypes.lookup(filename);\n return mimeType === false ? undefined : mimeType;\n}\n","import { readFile } from \"node:fs/promises\";\nimport { basename } from \"node:path\";\nimport type { ArgsDef } from \"citty\";\nimport { Result } from \"@praha/byethrow\";\nimport {\n defineCommand,\n type CommandFailure,\n type CommandOutput,\n} from \"../../define-command.js\";\nimport { contextArgs } from \"../../shared.js\";\nimport { runWithContext, type CommandContext } from \"../../run-with-context.js\";\nimport { apiErrorFailure } from \"../../api-errors.js\";\nimport { toResult } from \"../../../api/errors.js\";\nimport { multipartBodySerializer } from \"../../../api/multipart.js\";\nimport { renderDetail } from \"../../../ui/detail.js\";\nimport { mimeTypeFromFilename } from \"./mime.js\";\n\nexport async function bucketObjectUploadHandler(\n ctx: CommandContext,\n options: { bucket: string; filePath: string; key?: string },\n): Promise<Result.Result<CommandOutput | undefined, CommandFailure>> {\n // Buffer のままだと ArrayBufferLike 由来で BlobPart に渡せないため、ArrayBuffer 上にコピーする\n let bytes: Uint8Array<ArrayBuffer>;\n try {\n bytes = new Uint8Array(await readFile(options.filePath));\n } catch {\n return Result.fail({\n message: `Could not read file: ${options.filePath}`,\n });\n }\n // originalFilename をサーバーに伝えるため Blob ではなく File で包む\n const fileName = basename(options.filePath);\n const file = new File([bytes], fileName, {\n type: mimeTypeFromFilename(fileName),\n });\n\n const fileField: { file: string } =\n // @ts-expect-error -- openapi-typescript が format: binary を string として生成するため File を渡せない\n { file };\n const uploaded = toResult(\n await ctx.client.POST(\n \"/projects/{projectName}/buckets/{bucketName}/objects\",\n {\n params: {\n path: { projectName: ctx.projectName, bucketName: options.bucket },\n },\n body: {\n ...fileField,\n ...(options.key !== undefined ? { key: options.key } : {}),\n },\n bodySerializer: multipartBodySerializer,\n },\n ),\n );\n if (Result.isFailure(uploaded)) return apiErrorFailure(uploaded.error);\n\n const value = uploaded.value;\n return Result.succeed({\n json: value,\n text: () =>\n renderDetail([\n [\"Uploaded\", value.key],\n [\"Original filename\", value.originalFilename],\n [\"Size\", String(value.size)],\n [\"Type\", value.type],\n [\"Public URL\", value.publicUrl ?? \"-\"],\n ]),\n });\n}\n\nconst uploadArgs = {\n ...contextArgs,\n bucket: {\n type: \"positional\",\n required: true,\n description: \"Bucket name\",\n },\n file: {\n type: \"positional\",\n required: true,\n description: \"Path to the local file to upload\",\n },\n key: {\n type: \"string\",\n description: \"Object key (generated by the server when omitted)\",\n },\n} satisfies ArgsDef;\n\nexport default defineCommand({\n meta: {\n name: \"upload\",\n description: \"Upload a file to a bucket\",\n },\n args: uploadArgs,\n run: ({ args }) =>\n runWithContext(args, (ctx) =>\n bucketObjectUploadHandler(ctx, {\n bucket: args.bucket,\n filePath: args.file,\n key: typeof args.key === \"string\" ? args.key : undefined,\n }),\n ),\n});\n"],"mappings":";;;;;;;;;;AACA,SAAgB,wBACd,MACU;CACV,MAAM,WAAW,IAAI,SAAS;CAC9B,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,IAAI,GAAG;EAC/C,IAAI,UAAU,QAAW;EACzB,SAAS,OAAO,KAAK,KAAK;CAC5B;CACA,OAAO;AACT;;;;ACNA,SAAgB,qBAAqB,UAAsC;CACzE,MAAM,WAAW,UAAU,OAAO,QAAQ;CAC1C,OAAO,aAAa,QAAQ,SAAY;AAC1C;;;;ACUA,eAAsB,0BACpB,KACA,SACmE;CAEnE,IAAI;CACJ,IAAI;EACF,QAAQ,IAAI,WAAW,MAAM,SAAS,QAAQ,QAAQ,CAAC;CACzD,QAAQ;EACN,OAAO,OAAO,KAAK,EACjB,SAAS,wBAAwB,QAAQ,WAC3C,CAAC;CACH;CAEA,MAAM,WAAW,SAAS,QAAQ,QAAQ;CAK1C,MAAM,YAEJ,EAAE,UANa,KAAK,CAAC,KAAK,GAAG,UAAU,EACvC,MAAM,qBAAqB,QAAQ,EACrC,CAIO,EAAE;CACT,MAAM,WAAW,SACf,MAAM,IAAI,OAAO,KACf,wDACA;EACE,QAAQ,EACN,MAAM;GAAE,aAAa,IAAI;GAAa,YAAY,QAAQ;EAAO,EACnE;EACA,MAAM;GACJ,GAAG;GACH,GAAI,QAAQ,QAAQ,SAAY,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC;EAC1D;EACA,gBAAgB;CAClB,CACF,CACF;CACA,IAAI,OAAO,UAAU,QAAQ,GAAG,OAAO,gBAAgB,SAAS,KAAK;CAErE,MAAM,QAAQ,SAAS;CACvB,OAAO,OAAO,QAAQ;EACpB,MAAM;EACN,YACE,aAAa;GACX,CAAC,YAAY,MAAM,GAAG;GACtB,CAAC,qBAAqB,MAAM,gBAAgB;GAC5C,CAAC,QAAQ,OAAO,MAAM,IAAI,CAAC;GAC3B,CAAC,QAAQ,MAAM,IAAI;GACnB,CAAC,cAAc,MAAM,aAAa,GAAG;EACvC,CAAC;CACL,CAAC;AACH;AAEA,MAAM,aAAa;CACjB,GAAG;CACH,QAAQ;EACN,MAAM;EACN,UAAU;EACV,aAAa;CACf;CACA,MAAM;EACJ,MAAM;EACN,UAAU;EACV,aAAa;CACf;CACA,KAAK;EACH,MAAM;EACN,aAAa;CACf;AACF;AAEA,qBAAe,cAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,MAAM;CACN,MAAM,EAAE,WACN,eAAe,OAAO,QACpB,0BAA0B,KAAK;EAC7B,QAAQ,KAAK;EACb,UAAU,KAAK;EACf,KAAK,OAAO,KAAK,QAAQ,WAAW,KAAK,MAAM;CACjD,CAAC,CACH;AACJ,CAAC"}
1
+ {"version":3,"file":"upload-CDtzV9Wx.mjs","names":[],"sources":["../src/cli/api/multipart.ts","../src/cli/commands/bucket/object/mime.ts","../src/cli/commands/bucket/object/upload.ts"],"sourcesContent":["// openapi-fetch のデフォルト serializer は JSON 前提のため、multipart/form-data はこの serializer を明示指定する。\nexport function multipartBodySerializer(\n body: Record<string, string | File | undefined>,\n): FormData {\n const formData = new FormData();\n for (const [key, value] of Object.entries(body)) {\n if (value === undefined) continue;\n formData.append(key, value);\n }\n return formData;\n}\n","import mimeTypes from \"mime-types\";\n\n// Node で readFile したバイト列を File に包むだけでは type が空になり、サーバーが\n// type を保存できず画像の width/height 抽出(image/ 判定)も働かないため、拡張子から申告する。\nexport function mimeTypeFromFilename(filename: string): string | undefined {\n const mimeType = mimeTypes.lookup(filename);\n return mimeType === false ? undefined : mimeType;\n}\n","import { readFile } from \"node:fs/promises\";\nimport { basename } from \"node:path\";\nimport type { ArgsDef } from \"citty\";\nimport { Result } from \"@praha/byethrow\";\nimport {\n defineCommand,\n type CommandFailure,\n type CommandOutput,\n} from \"../../define-command.js\";\nimport { contextArgs } from \"../../shared.js\";\nimport { runWithContext, type CommandContext } from \"../../run-with-context.js\";\nimport { apiErrorFailure } from \"../../api-errors.js\";\nimport { toResult } from \"../../../api/errors.js\";\nimport { multipartBodySerializer } from \"../../../api/multipart.js\";\nimport { renderDetail } from \"../../../ui/detail.js\";\nimport { mimeTypeFromFilename } from \"./mime.js\";\n\nexport async function bucketObjectUploadHandler(\n ctx: CommandContext,\n options: { bucket: string; filePath: string; key?: string },\n): Promise<Result.Result<CommandOutput | undefined, CommandFailure>> {\n // Buffer のままだと ArrayBufferLike 由来で BlobPart に渡せないため、ArrayBuffer 上にコピーする\n let bytes: Uint8Array<ArrayBuffer>;\n try {\n bytes = new Uint8Array(await readFile(options.filePath));\n } catch {\n return Result.fail({\n message: `Could not read file: ${options.filePath}`,\n });\n }\n // originalFilename をサーバーに伝えるため Blob ではなく File で包む\n const fileName = basename(options.filePath);\n const file = new File([bytes], fileName, {\n type: mimeTypeFromFilename(fileName),\n });\n\n const fileField: { file: string } =\n // @ts-expect-error -- openapi-typescript が format: binary を string として生成するため File を渡せない\n { file };\n const uploaded = toResult(\n await ctx.client.POST(\n \"/projects/{projectName}/buckets/{bucketName}/objects\",\n {\n params: {\n path: { projectName: ctx.projectName, bucketName: options.bucket },\n },\n body: {\n ...fileField,\n ...(options.key !== undefined ? { key: options.key } : {}),\n },\n bodySerializer: multipartBodySerializer,\n },\n ),\n );\n if (Result.isFailure(uploaded)) return apiErrorFailure(uploaded.error);\n\n const value = uploaded.value;\n return Result.succeed({\n json: value,\n text: () =>\n renderDetail([\n [\"Uploaded\", value.key],\n [\"Original filename\", value.originalFilename],\n [\"Size\", String(value.size)],\n [\"Type\", value.type],\n [\"Public URL\", value.publicUrl ?? \"-\"],\n ]),\n });\n}\n\nconst uploadArgs = {\n ...contextArgs,\n bucket: {\n type: \"positional\",\n required: true,\n description: \"Bucket name\",\n },\n file: {\n type: \"positional\",\n required: true,\n description: \"Path to the local file to upload\",\n },\n key: {\n type: \"string\",\n description: \"Object key (generated by the server when omitted)\",\n },\n} satisfies ArgsDef;\n\nexport default defineCommand({\n meta: {\n name: \"upload\",\n description: \"Upload a file to a bucket\",\n },\n args: uploadArgs,\n run: ({ args }) =>\n runWithContext(args, (ctx) =>\n bucketObjectUploadHandler(ctx, {\n bucket: args.bucket,\n filePath: args.file,\n key: typeof args.key === \"string\" ? args.key : undefined,\n }),\n ),\n});\n"],"mappings":";;;;;;;;;;AACA,SAAgB,wBACd,MACU;CACV,MAAM,WAAW,IAAI,SAAS;CAC9B,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,IAAI,GAAG;EAC/C,IAAI,UAAU,QAAW;EACzB,SAAS,OAAO,KAAK,KAAK;CAC5B;CACA,OAAO;AACT;;;;ACNA,SAAgB,qBAAqB,UAAsC;CACzE,MAAM,WAAW,UAAU,OAAO,QAAQ;CAC1C,OAAO,aAAa,QAAQ,SAAY;AAC1C;;;;ACUA,eAAsB,0BACpB,KACA,SACmE;CAEnE,IAAI;CACJ,IAAI;EACF,QAAQ,IAAI,WAAW,MAAM,SAAS,QAAQ,QAAQ,CAAC;CACzD,QAAQ;EACN,OAAO,OAAO,KAAK,EACjB,SAAS,wBAAwB,QAAQ,WAC3C,CAAC;CACH;CAEA,MAAM,WAAW,SAAS,QAAQ,QAAQ;CAK1C,MAAM,YAEJ,EAAE,UANa,KAAK,CAAC,KAAK,GAAG,UAAU,EACvC,MAAM,qBAAqB,QAAQ,EACrC,CAIO,EAAE;CACT,MAAM,WAAW,SACf,MAAM,IAAI,OAAO,KACf,wDACA;EACE,QAAQ,EACN,MAAM;GAAE,aAAa,IAAI;GAAa,YAAY,QAAQ;EAAO,EACnE;EACA,MAAM;GACJ,GAAG;GACH,GAAI,QAAQ,QAAQ,SAAY,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC;EAC1D;EACA,gBAAgB;CAClB,CACF,CACF;CACA,IAAI,OAAO,UAAU,QAAQ,GAAG,OAAO,gBAAgB,SAAS,KAAK;CAErE,MAAM,QAAQ,SAAS;CACvB,OAAO,OAAO,QAAQ;EACpB,MAAM;EACN,YACE,aAAa;GACX,CAAC,YAAY,MAAM,GAAG;GACtB,CAAC,qBAAqB,MAAM,gBAAgB;GAC5C,CAAC,QAAQ,OAAO,MAAM,IAAI,CAAC;GAC3B,CAAC,QAAQ,MAAM,IAAI;GACnB,CAAC,cAAc,MAAM,aAAa,GAAG;EACvC,CAAC;CACL,CAAC;AACH;AAEA,MAAM,aAAa;CACjB,GAAG;CACH,QAAQ;EACN,MAAM;EACN,UAAU;EACV,aAAa;CACf;CACA,MAAM;EACJ,MAAM;EACN,UAAU;EACV,aAAa;CACf;CACA,KAAK;EACH,MAAM;EACN,aAAa;CACf;AACF;AAEA,qBAAe,cAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,MAAM;CACN,MAAM,EAAE,WACN,eAAe,OAAO,QACpB,0BAA0B,KAAK;EAC7B,QAAQ,KAAK;EACb,UAAU,KAAK;EACf,KAAK,OAAO,KAAK,QAAQ,WAAW,KAAK,MAAM;CACjD,CAAC,CACH;AACJ,CAAC"}
@@ -1,10 +1,10 @@
1
1
  const require_cli_main = require('./cli/main.cjs');
2
2
  const require_shared = require('./shared-DHRPzzKl.cjs');
3
- const require_run_with_context = require('./run-with-context-DJNnEigg.cjs');
3
+ const require_run_with_context = require('./run-with-context-D8pSrqD_.cjs');
4
4
  const require_detail = require('./detail-8CXNIhKw.cjs');
5
5
  let _praha_byethrow = require("@praha/byethrow");
6
- let node_fs_promises = require("node:fs/promises");
7
6
  let node_path = require("node:path");
7
+ let node_fs_promises = require("node:fs/promises");
8
8
  let mime_types = require("mime-types");
9
9
  mime_types = require_cli_main.__toESM(mime_types, 1);
10
10
 
@@ -92,4 +92,4 @@ var upload_default = require_cli_main.defineCommand({
92
92
 
93
93
  //#endregion
94
94
  exports.default = upload_default;
95
- //# sourceMappingURL=upload-C43ZXxyb.cjs.map
95
+ //# sourceMappingURL=upload-DIln1QDA.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"upload-C43ZXxyb.cjs","names":["mimeTypes","Result","toResult","apiErrorFailure","renderDetail","contextArgs","defineCommand","runWithContext"],"sources":["../src/cli/api/multipart.ts","../src/cli/commands/bucket/object/mime.ts","../src/cli/commands/bucket/object/upload.ts"],"sourcesContent":["// openapi-fetch のデフォルト serializer は JSON 前提のため、multipart/form-data はこの serializer を明示指定する。\nexport function multipartBodySerializer(\n body: Record<string, string | File | undefined>,\n): FormData {\n const formData = new FormData();\n for (const [key, value] of Object.entries(body)) {\n if (value === undefined) continue;\n formData.append(key, value);\n }\n return formData;\n}\n","import mimeTypes from \"mime-types\";\n\n// Node で readFile したバイト列を File に包むだけでは type が空になり、サーバーが\n// type を保存できず画像の width/height 抽出(image/ 判定)も働かないため、拡張子から申告する。\nexport function mimeTypeFromFilename(filename: string): string | undefined {\n const mimeType = mimeTypes.lookup(filename);\n return mimeType === false ? undefined : mimeType;\n}\n","import { readFile } from \"node:fs/promises\";\nimport { basename } from \"node:path\";\nimport type { ArgsDef } from \"citty\";\nimport { Result } from \"@praha/byethrow\";\nimport {\n defineCommand,\n type CommandFailure,\n type CommandOutput,\n} from \"../../define-command.js\";\nimport { contextArgs } from \"../../shared.js\";\nimport { runWithContext, type CommandContext } from \"../../run-with-context.js\";\nimport { apiErrorFailure } from \"../../api-errors.js\";\nimport { toResult } from \"../../../api/errors.js\";\nimport { multipartBodySerializer } from \"../../../api/multipart.js\";\nimport { renderDetail } from \"../../../ui/detail.js\";\nimport { mimeTypeFromFilename } from \"./mime.js\";\n\nexport async function bucketObjectUploadHandler(\n ctx: CommandContext,\n options: { bucket: string; filePath: string; key?: string },\n): Promise<Result.Result<CommandOutput | undefined, CommandFailure>> {\n // Buffer のままだと ArrayBufferLike 由来で BlobPart に渡せないため、ArrayBuffer 上にコピーする\n let bytes: Uint8Array<ArrayBuffer>;\n try {\n bytes = new Uint8Array(await readFile(options.filePath));\n } catch {\n return Result.fail({\n message: `Could not read file: ${options.filePath}`,\n });\n }\n // originalFilename をサーバーに伝えるため Blob ではなく File で包む\n const fileName = basename(options.filePath);\n const file = new File([bytes], fileName, {\n type: mimeTypeFromFilename(fileName),\n });\n\n const fileField: { file: string } =\n // @ts-expect-error -- openapi-typescript が format: binary を string として生成するため File を渡せない\n { file };\n const uploaded = toResult(\n await ctx.client.POST(\n \"/projects/{projectName}/buckets/{bucketName}/objects\",\n {\n params: {\n path: { projectName: ctx.projectName, bucketName: options.bucket },\n },\n body: {\n ...fileField,\n ...(options.key !== undefined ? { key: options.key } : {}),\n },\n bodySerializer: multipartBodySerializer,\n },\n ),\n );\n if (Result.isFailure(uploaded)) return apiErrorFailure(uploaded.error);\n\n const value = uploaded.value;\n return Result.succeed({\n json: value,\n text: () =>\n renderDetail([\n [\"Uploaded\", value.key],\n [\"Original filename\", value.originalFilename],\n [\"Size\", String(value.size)],\n [\"Type\", value.type],\n [\"Public URL\", value.publicUrl ?? \"-\"],\n ]),\n });\n}\n\nconst uploadArgs = {\n ...contextArgs,\n bucket: {\n type: \"positional\",\n required: true,\n description: \"Bucket name\",\n },\n file: {\n type: \"positional\",\n required: true,\n description: \"Path to the local file to upload\",\n },\n key: {\n type: \"string\",\n description: \"Object key (generated by the server when omitted)\",\n },\n} satisfies ArgsDef;\n\nexport default defineCommand({\n meta: {\n name: \"upload\",\n description: \"Upload a file to a bucket\",\n },\n args: uploadArgs,\n run: ({ args }) =>\n runWithContext(args, (ctx) =>\n bucketObjectUploadHandler(ctx, {\n bucket: args.bucket,\n filePath: args.file,\n key: typeof args.key === \"string\" ? args.key : undefined,\n }),\n ),\n});\n"],"mappings":";;;;;;;;;;;AACA,SAAgB,wBACd,MACU;CACV,MAAM,WAAW,IAAI,SAAS;CAC9B,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,IAAI,GAAG;EAC/C,IAAI,UAAU,QAAW;EACzB,SAAS,OAAO,KAAK,KAAK;CAC5B;CACA,OAAO;AACT;;;;ACNA,SAAgB,qBAAqB,UAAsC;CACzE,MAAM,WAAWA,mBAAU,OAAO,QAAQ;CAC1C,OAAO,aAAa,QAAQ,SAAY;AAC1C;;;;ACUA,eAAsB,0BACpB,KACA,SACmE;CAEnE,IAAI;CACJ,IAAI;EACF,QAAQ,IAAI,WAAW,qCAAe,QAAQ,QAAQ,CAAC;CACzD,QAAQ;EACN,OAAOC,uBAAO,KAAK,EACjB,SAAS,wBAAwB,QAAQ,WAC3C,CAAC;CACH;CAEA,MAAM,mCAAoB,QAAQ,QAAQ;CAK1C,MAAM,YAEJ,EAAE,UANa,KAAK,CAAC,KAAK,GAAG,UAAU,EACvC,MAAM,qBAAqB,QAAQ,EACrC,CAIO,EAAE;CACT,MAAM,WAAWC,kCACf,MAAM,IAAI,OAAO,KACf,wDACA;EACE,QAAQ,EACN,MAAM;GAAE,aAAa,IAAI;GAAa,YAAY,QAAQ;EAAO,EACnE;EACA,MAAM;GACJ,GAAG;GACH,GAAI,QAAQ,QAAQ,SAAY,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC;EAC1D;EACA,gBAAgB;CAClB,CACF,CACF;CACA,IAAID,uBAAO,UAAU,QAAQ,GAAG,OAAOE,yCAAgB,SAAS,KAAK;CAErE,MAAM,QAAQ,SAAS;CACvB,OAAOF,uBAAO,QAAQ;EACpB,MAAM;EACN,YACEG,4BAAa;GACX,CAAC,YAAY,MAAM,GAAG;GACtB,CAAC,qBAAqB,MAAM,gBAAgB;GAC5C,CAAC,QAAQ,OAAO,MAAM,IAAI,CAAC;GAC3B,CAAC,QAAQ,MAAM,IAAI;GACnB,CAAC,cAAc,MAAM,aAAa,GAAG;EACvC,CAAC;CACL,CAAC;AACH;AAEA,MAAM,aAAa;CACjB,GAAGC;CACH,QAAQ;EACN,MAAM;EACN,UAAU;EACV,aAAa;CACf;CACA,MAAM;EACJ,MAAM;EACN,UAAU;EACV,aAAa;CACf;CACA,KAAK;EACH,MAAM;EACN,aAAa;CACf;AACF;AAEA,qBAAeC,+BAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,MAAM;CACN,MAAM,EAAE,WACNC,wCAAe,OAAO,QACpB,0BAA0B,KAAK;EAC7B,QAAQ,KAAK;EACb,UAAU,KAAK;EACf,KAAK,OAAO,KAAK,QAAQ,WAAW,KAAK,MAAM;CACjD,CAAC,CACH;AACJ,CAAC"}
1
+ {"version":3,"file":"upload-DIln1QDA.cjs","names":["mimeTypes","Result","toResult","apiErrorFailure","renderDetail","contextArgs","defineCommand","runWithContext"],"sources":["../src/cli/api/multipart.ts","../src/cli/commands/bucket/object/mime.ts","../src/cli/commands/bucket/object/upload.ts"],"sourcesContent":["// openapi-fetch のデフォルト serializer は JSON 前提のため、multipart/form-data はこの serializer を明示指定する。\nexport function multipartBodySerializer(\n body: Record<string, string | File | undefined>,\n): FormData {\n const formData = new FormData();\n for (const [key, value] of Object.entries(body)) {\n if (value === undefined) continue;\n formData.append(key, value);\n }\n return formData;\n}\n","import mimeTypes from \"mime-types\";\n\n// Node で readFile したバイト列を File に包むだけでは type が空になり、サーバーが\n// type を保存できず画像の width/height 抽出(image/ 判定)も働かないため、拡張子から申告する。\nexport function mimeTypeFromFilename(filename: string): string | undefined {\n const mimeType = mimeTypes.lookup(filename);\n return mimeType === false ? undefined : mimeType;\n}\n","import { readFile } from \"node:fs/promises\";\nimport { basename } from \"node:path\";\nimport type { ArgsDef } from \"citty\";\nimport { Result } from \"@praha/byethrow\";\nimport {\n defineCommand,\n type CommandFailure,\n type CommandOutput,\n} from \"../../define-command.js\";\nimport { contextArgs } from \"../../shared.js\";\nimport { runWithContext, type CommandContext } from \"../../run-with-context.js\";\nimport { apiErrorFailure } from \"../../api-errors.js\";\nimport { toResult } from \"../../../api/errors.js\";\nimport { multipartBodySerializer } from \"../../../api/multipart.js\";\nimport { renderDetail } from \"../../../ui/detail.js\";\nimport { mimeTypeFromFilename } from \"./mime.js\";\n\nexport async function bucketObjectUploadHandler(\n ctx: CommandContext,\n options: { bucket: string; filePath: string; key?: string },\n): Promise<Result.Result<CommandOutput | undefined, CommandFailure>> {\n // Buffer のままだと ArrayBufferLike 由来で BlobPart に渡せないため、ArrayBuffer 上にコピーする\n let bytes: Uint8Array<ArrayBuffer>;\n try {\n bytes = new Uint8Array(await readFile(options.filePath));\n } catch {\n return Result.fail({\n message: `Could not read file: ${options.filePath}`,\n });\n }\n // originalFilename をサーバーに伝えるため Blob ではなく File で包む\n const fileName = basename(options.filePath);\n const file = new File([bytes], fileName, {\n type: mimeTypeFromFilename(fileName),\n });\n\n const fileField: { file: string } =\n // @ts-expect-error -- openapi-typescript が format: binary を string として生成するため File を渡せない\n { file };\n const uploaded = toResult(\n await ctx.client.POST(\n \"/projects/{projectName}/buckets/{bucketName}/objects\",\n {\n params: {\n path: { projectName: ctx.projectName, bucketName: options.bucket },\n },\n body: {\n ...fileField,\n ...(options.key !== undefined ? { key: options.key } : {}),\n },\n bodySerializer: multipartBodySerializer,\n },\n ),\n );\n if (Result.isFailure(uploaded)) return apiErrorFailure(uploaded.error);\n\n const value = uploaded.value;\n return Result.succeed({\n json: value,\n text: () =>\n renderDetail([\n [\"Uploaded\", value.key],\n [\"Original filename\", value.originalFilename],\n [\"Size\", String(value.size)],\n [\"Type\", value.type],\n [\"Public URL\", value.publicUrl ?? \"-\"],\n ]),\n });\n}\n\nconst uploadArgs = {\n ...contextArgs,\n bucket: {\n type: \"positional\",\n required: true,\n description: \"Bucket name\",\n },\n file: {\n type: \"positional\",\n required: true,\n description: \"Path to the local file to upload\",\n },\n key: {\n type: \"string\",\n description: \"Object key (generated by the server when omitted)\",\n },\n} satisfies ArgsDef;\n\nexport default defineCommand({\n meta: {\n name: \"upload\",\n description: \"Upload a file to a bucket\",\n },\n args: uploadArgs,\n run: ({ args }) =>\n runWithContext(args, (ctx) =>\n bucketObjectUploadHandler(ctx, {\n bucket: args.bucket,\n filePath: args.file,\n key: typeof args.key === \"string\" ? args.key : undefined,\n }),\n ),\n});\n"],"mappings":";;;;;;;;;;;AACA,SAAgB,wBACd,MACU;CACV,MAAM,WAAW,IAAI,SAAS;CAC9B,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,IAAI,GAAG;EAC/C,IAAI,UAAU,QAAW;EACzB,SAAS,OAAO,KAAK,KAAK;CAC5B;CACA,OAAO;AACT;;;;ACNA,SAAgB,qBAAqB,UAAsC;CACzE,MAAM,WAAWA,mBAAU,OAAO,QAAQ;CAC1C,OAAO,aAAa,QAAQ,SAAY;AAC1C;;;;ACUA,eAAsB,0BACpB,KACA,SACmE;CAEnE,IAAI;CACJ,IAAI;EACF,QAAQ,IAAI,WAAW,qCAAe,QAAQ,QAAQ,CAAC;CACzD,QAAQ;EACN,OAAOC,uBAAO,KAAK,EACjB,SAAS,wBAAwB,QAAQ,WAC3C,CAAC;CACH;CAEA,MAAM,mCAAoB,QAAQ,QAAQ;CAK1C,MAAM,YAEJ,EAAE,UANa,KAAK,CAAC,KAAK,GAAG,UAAU,EACvC,MAAM,qBAAqB,QAAQ,EACrC,CAIO,EAAE;CACT,MAAM,WAAWC,kCACf,MAAM,IAAI,OAAO,KACf,wDACA;EACE,QAAQ,EACN,MAAM;GAAE,aAAa,IAAI;GAAa,YAAY,QAAQ;EAAO,EACnE;EACA,MAAM;GACJ,GAAG;GACH,GAAI,QAAQ,QAAQ,SAAY,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC;EAC1D;EACA,gBAAgB;CAClB,CACF,CACF;CACA,IAAID,uBAAO,UAAU,QAAQ,GAAG,OAAOE,yCAAgB,SAAS,KAAK;CAErE,MAAM,QAAQ,SAAS;CACvB,OAAOF,uBAAO,QAAQ;EACpB,MAAM;EACN,YACEG,4BAAa;GACX,CAAC,YAAY,MAAM,GAAG;GACtB,CAAC,qBAAqB,MAAM,gBAAgB;GAC5C,CAAC,QAAQ,OAAO,MAAM,IAAI,CAAC;GAC3B,CAAC,QAAQ,MAAM,IAAI;GACnB,CAAC,cAAc,MAAM,aAAa,GAAG;EACvC,CAAC;CACL,CAAC;AACH;AAEA,MAAM,aAAa;CACjB,GAAGC;CACH,QAAQ;EACN,MAAM;EACN,UAAU;EACV,aAAa;CACf;CACA,MAAM;EACJ,MAAM;EACN,UAAU;EACV,aAAa;CACf;CACA,KAAK;EACH,MAAM;EACN,aAAa;CACf;AACF;AAEA,qBAAeC,+BAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,MAAM;CACN,MAAM,EAAE,WACNC,wCAAe,OAAO,QACpB,0BAA0B,KAAK;EAC7B,QAAQ,KAAK;EACb,UAAU,KAAK;EACf,KAAK,OAAO,KAAK,QAAQ,WAAW,KAAK,MAAM;CACjD,CAAC,CACH;AACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { t as defineCommand } from "./cli/main.mjs";
2
+
3
+ //#region src/cli/commands/webhook/index.ts
4
+ var webhook_default = defineCommand({
5
+ meta: {
6
+ name: "webhook",
7
+ description: "Manage project webhooks"
8
+ },
9
+ subCommands: {
10
+ list: () => import("./list-CGZ3iT6J.mjs").then((m) => m.default),
11
+ get: () => import("./get-Vo3yr12d.mjs").then((m) => m.default),
12
+ create: () => import("./create-m5fNBqQE.mjs").then((m) => m.default),
13
+ update: () => import("./update-B5hKKw0K.mjs").then((m) => m.default),
14
+ delete: () => import("./delete-BhJK-8vE.mjs").then((m) => m.default)
15
+ }
16
+ });
17
+
18
+ //#endregion
19
+ export { webhook_default as default };
20
+ //# sourceMappingURL=webhook-BT3cHrq5.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"webhook-Cy850dNs.mjs","names":[],"sources":["../src/cli/commands/webhook/index.ts"],"sourcesContent":["import { defineCommand } from \"../define-command.js\";\n\nexport default defineCommand({\n meta: {\n name: \"webhook\",\n description: \"Manage project webhooks\",\n },\n subCommands: {\n list: () => import(\"./list.js\").then((m) => m.default),\n get: () => import(\"./get.js\").then((m) => m.default),\n create: () => import(\"./create.js\").then((m) => m.default),\n update: () => import(\"./update.js\").then((m) => m.default),\n delete: () => import(\"./delete.js\").then((m) => m.default),\n },\n});\n"],"mappings":";;;AAEA,sBAAe,cAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,aAAa;EACX,YAAY,OAAO,sBAAY,CAAC,MAAM,MAAM,EAAE,OAAO;EACrD,WAAW,OAAO,qBAAW,CAAC,MAAM,MAAM,EAAE,OAAO;EACnD,cAAc,OAAO,wBAAc,CAAC,MAAM,MAAM,EAAE,OAAO;EACzD,cAAc,OAAO,wBAAc,CAAC,MAAM,MAAM,EAAE,OAAO;EACzD,cAAc,OAAO,wBAAc,CAAC,MAAM,MAAM,EAAE,OAAO;CAC3D;AACF,CAAC"}
1
+ {"version":3,"file":"webhook-BT3cHrq5.mjs","names":[],"sources":["../src/cli/commands/webhook/index.ts"],"sourcesContent":["import { defineCommand } from \"../define-command.js\";\n\nexport default defineCommand({\n meta: {\n name: \"webhook\",\n description: \"Manage project webhooks\",\n },\n subCommands: {\n list: () => import(\"./list.js\").then((m) => m.default),\n get: () => import(\"./get.js\").then((m) => m.default),\n create: () => import(\"./create.js\").then((m) => m.default),\n update: () => import(\"./update.js\").then((m) => m.default),\n delete: () => import(\"./delete.js\").then((m) => m.default),\n },\n});\n"],"mappings":";;;AAEA,sBAAe,cAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,aAAa;EACX,YAAY,OAAO,sBAAY,CAAC,MAAM,MAAM,EAAE,OAAO;EACrD,WAAW,OAAO,qBAAW,CAAC,MAAM,MAAM,EAAE,OAAO;EACnD,cAAc,OAAO,wBAAc,CAAC,MAAM,MAAM,EAAE,OAAO;EACzD,cAAc,OAAO,wBAAc,CAAC,MAAM,MAAM,EAAE,OAAO;EACzD,cAAc,OAAO,wBAAc,CAAC,MAAM,MAAM,EAAE,OAAO;CAC3D;AACF,CAAC"}
@@ -0,0 +1,20 @@
1
+ const require_cli_main = require('./cli/main.cjs');
2
+
3
+ //#region src/cli/commands/webhook/index.ts
4
+ var webhook_default = require_cli_main.defineCommand({
5
+ meta: {
6
+ name: "webhook",
7
+ description: "Manage project webhooks"
8
+ },
9
+ subCommands: {
10
+ list: () => Promise.resolve().then(() => require("./list-fG4zo8zz.cjs")).then((m) => m.default),
11
+ get: () => Promise.resolve().then(() => require("./get-CKZPn669.cjs")).then((m) => m.default),
12
+ create: () => Promise.resolve().then(() => require("./create-CNDCTpi0.cjs")).then((m) => m.default),
13
+ update: () => Promise.resolve().then(() => require("./update-DcTzR54Z.cjs")).then((m) => m.default),
14
+ delete: () => Promise.resolve().then(() => require("./delete-B9j8c8ln.cjs")).then((m) => m.default)
15
+ }
16
+ });
17
+
18
+ //#endregion
19
+ exports.default = webhook_default;
20
+ //# sourceMappingURL=webhook-CQeuAqec.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"webhook-CVFmch5W.cjs","names":["defineCommand"],"sources":["../src/cli/commands/webhook/index.ts"],"sourcesContent":["import { defineCommand } from \"../define-command.js\";\n\nexport default defineCommand({\n meta: {\n name: \"webhook\",\n description: \"Manage project webhooks\",\n },\n subCommands: {\n list: () => import(\"./list.js\").then((m) => m.default),\n get: () => import(\"./get.js\").then((m) => m.default),\n create: () => import(\"./create.js\").then((m) => m.default),\n update: () => import(\"./update.js\").then((m) => m.default),\n delete: () => import(\"./delete.js\").then((m) => m.default),\n },\n});\n"],"mappings":";;;AAEA,sBAAeA,+BAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,aAAa;EACX,iDAAY,wBAAoB,MAAM,MAAM,EAAE,OAAO;EACrD,gDAAW,uBAAmB,MAAM,MAAM,EAAE,OAAO;EACnD,mDAAc,0BAAsB,MAAM,MAAM,EAAE,OAAO;EACzD,mDAAc,0BAAsB,MAAM,MAAM,EAAE,OAAO;EACzD,mDAAc,0BAAsB,MAAM,MAAM,EAAE,OAAO;CAC3D;AACF,CAAC"}
1
+ {"version":3,"file":"webhook-CQeuAqec.cjs","names":["defineCommand"],"sources":["../src/cli/commands/webhook/index.ts"],"sourcesContent":["import { defineCommand } from \"../define-command.js\";\n\nexport default defineCommand({\n meta: {\n name: \"webhook\",\n description: \"Manage project webhooks\",\n },\n subCommands: {\n list: () => import(\"./list.js\").then((m) => m.default),\n get: () => import(\"./get.js\").then((m) => m.default),\n create: () => import(\"./create.js\").then((m) => m.default),\n update: () => import(\"./update.js\").then((m) => m.default),\n delete: () => import(\"./delete.js\").then((m) => m.default),\n },\n});\n"],"mappings":";;;AAEA,sBAAeA,+BAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,aAAa;EACX,iDAAY,wBAAoB,MAAM,MAAM,EAAE,OAAO;EACrD,gDAAW,uBAAmB,MAAM,MAAM,EAAE,OAAO;EACnD,mDAAc,0BAAsB,MAAM,MAAM,EAAE,OAAO;EACzD,mDAAc,0BAAsB,MAAM,MAAM,EAAE,OAAO;EACzD,mDAAc,0BAAsB,MAAM,MAAM,EAAE,OAAO;CAC3D;AACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orizm/cli",
3
- "version": "3.0.1",
3
+ "version": "3.2.0",
4
4
  "description": "Orizm CLI",
5
5
  "type": "module",
6
6
  "repository": {
@@ -30,10 +30,10 @@
30
30
  "cli-table3": "0.6.5",
31
31
  "consola": "3.4.2",
32
32
  "esbuild": "0.28.2",
33
- "hono": "4.13.1",
34
- "jose": "6.2.8",
33
+ "hono": "4.13.3",
34
+ "jose": "6.2.10",
35
35
  "mime-types": "3.0.2",
36
- "open": "11.0.0",
36
+ "open": "11.0.1",
37
37
  "prettier": "3.9.6",
38
38
  "valibot": "1.4.2",
39
39
  "@orizm/common": "2.5.0"
@@ -51,7 +51,8 @@
51
51
  "license": "Apache-2.0",
52
52
  "scripts": {
53
53
  "dev": "tsdown --watch",
54
- "build": "tsdown --clean",
54
+ "build": "tsdown --clean && node scripts/bundle-docs.ts",
55
+ "bundle:docs": "node scripts/bundle-docs.ts",
55
56
  "lint": "eslint .",
56
57
  "typecheck": "tsc --noEmit",
57
58
  "typecheck:watch": "tsc --noEmit --watch",
@@ -1,18 +0,0 @@
1
- const require_cli_main = require('./cli/main.cjs');
2
-
3
- //#region src/cli/commands/auth/index.ts
4
- var auth_default = require_cli_main.defineCommand({
5
- meta: {
6
- name: "auth",
7
- description: "Manage authentication with Orizm"
8
- },
9
- subCommands: {
10
- login: () => Promise.resolve().then(() => require("./login-2XcHd4wn.cjs")).then((m) => m.default),
11
- logout: () => Promise.resolve().then(() => require("./logout-DC5TMJ5_.cjs")).then((m) => m.default),
12
- status: () => Promise.resolve().then(() => require("./status-Dq_NJE71.cjs")).then((m) => m.default)
13
- }
14
- });
15
-
16
- //#endregion
17
- exports.default = auth_default;
18
- //# sourceMappingURL=auth-CNbONZuf.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cms-BJnovGYT.mjs","names":[],"sources":["../src/cli/codegen/cms.ts","../src/cli/commands/codegen/cms.ts"],"sourcesContent":["import { CommonOrizmConfig } from \"../types.js\";\nimport { formatTsWithPrettier } from \"./format.js\";\nimport {\n AUTOGEN_HEADER,\n UTILITIES,\n RenderColumn,\n RenderIndex,\n toCodeTypeName,\n renderColumnField,\n renderTypeBlock,\n renderRefsFieldLines,\n renderUniqueFieldLines,\n renderModuleRowTypeBlock,\n renderModuleDescriptorBlock,\n renderSection,\n renderWebhookTypesSection,\n} from \"./render.js\";\n\ntype RenderTable = {\n name: string;\n columns: RenderColumn[];\n isSubmissions?: boolean;\n enableForm?: boolean;\n enableDrafts?: boolean;\n indexes?: RenderIndex[];\n formOptions?: { submissionColumns?: RenderColumn[] };\n};\n\nexport function renderCmsModule(config: CommonOrizmConfig): Promise<string> {\n const submissionTables: RenderTable[] = config.tables\n .filter((t) => t.enableForm)\n .map((t) => ({\n name: t.name + \"__submission\",\n columns: t.formOptions?.submissionColumns ?? [],\n isSubmissions: true,\n }));\n const allTables: RenderTable[] = [...config.tables, ...submissionTables];\n const modules = config.tableModules;\n\n const imports = [\n AUTOGEN_HEADER,\n \"\",\n 'import { FormValidationRules, StorageItemType } from \"@orizm/cms-sdk/common\";',\n 'import { OrizmCMSClient } from \"@orizm/cms-sdk\";',\n ].join(\"\\n\");\n\n const types = [\n renderSection(\"Tables\", allTables.map(renderTableTypes)),\n renderSection(\"Module types\", modules.map(renderModuleTypes)),\n \"// Descriptor types\\n\" +\n [\n ...allTables.map(renderTableDescriptor),\n modules.map(renderModuleDescriptorBlock).join(\"\\n\"),\n ].join(\"\\n\\n\"),\n renderWebhookTypesSection(allTables),\n ]\n .filter(Boolean)\n .join(\"\\n\\n\\n\");\n\n const source = [imports, UTILITIES, types, renderCmsClient(config)].join(\n \"\\n\\n\\n\",\n );\n\n return formatTsWithPrettier(source);\n}\n\nfunction renderTableTypes(table: RenderTable): string {\n const cols = table.columns;\n const name = toCodeTypeName(table.name);\n\n const rowType = renderTypeBlock(name, [\n \"id: string;\",\n \"createdAt: string;\",\n \"updatedAt: string;\",\n ...(!table.isSubmissions\n ? [\n \"group: string | null;\",\n \"publishedAt: string | null;\",\n \"_draft: boolean | null;\",\n \"_published: boolean | null;\",\n \"scheduledPublishAt: string | null;\",\n \"scheduledUnpublishAt: string | null;\",\n ]\n : [\n \"_formId: string;\",\n \"_content: unknown;\",\n \"_formSchema: unknown;\",\n \"_attachments: StorageItemType[];\",\n ]),\n ...cols.map((col) => renderColumnField(col)),\n ...(table.enableForm ? [\"formSchema: FormValidationRules;\"] : []),\n ]);\n\n const createType = renderTypeBlock(`${name}CreateInput`, [\n ...(!table.isSubmissions\n ? [\n \"group?: string | null;\",\n \"publishedAt?: string | null;\",\n \"scheduledPublishAt?: string | null;\",\n \"scheduledUnpublishAt?: string | null;\",\n \"createdAt?: string;\",\n ]\n : []),\n ...cols.map((col) =>\n renderColumnField(col, {\n optional: !col.required,\n suffix: \"CreateInput\",\n }),\n ),\n ...(table.enableForm ? [\"formSchema: FormValidationRules;\"] : []),\n ]);\n\n const updateType = renderTypeBlock(`${name}UpdateInput`, [\n ...cols\n .filter((col) => !col.readOnly)\n .map((col) =>\n renderColumnField(col, { optional: true, suffix: \"UpdateInput\" }),\n ),\n ...(!table.isSubmissions\n ? [\n \"publishedAt?: string | null;\",\n \"scheduledPublishAt?: string | null;\",\n \"scheduledUnpublishAt?: string | null;\",\n \"createdAt?: string;\",\n ]\n : []),\n ...(table.enableForm ? [\"formSchema: FormValidationRules;\"] : []),\n ]);\n\n return [rowType, createType, updateType].join(\"\\n\\n\");\n}\n\nfunction renderModuleTypes(mod: {\n name: string;\n columns: RenderColumn[];\n}): string {\n const name = toCodeTypeName(mod.name);\n const cols = mod.columns;\n\n const rowType = renderModuleRowTypeBlock(mod);\n\n const createType = renderTypeBlock(`${name}CreateInput`, [\n ...cols.map((col) =>\n renderColumnField(col, {\n optional: !col.required,\n suffix: \"CreateInput\",\n }),\n ),\n ]);\n\n const updateType = renderTypeBlock(`${name}UpdateInput`, [\n \"id?: string;\",\n ...cols.map((col) =>\n renderColumnField(col, {\n optional: !col.required,\n suffix: \"UpdateInput\",\n }),\n ),\n ]);\n\n return [rowType, createType, updateType].join(\"\\n\\n\");\n}\n\nfunction renderTableDescriptor(table: RenderTable): string {\n const name = toCodeTypeName(table.name);\n return renderTypeBlock(`${name}__Descriptor`, [\n `row: ${name};`,\n `create: ${name}CreateInput;`,\n `update: ${name}UpdateInput;`,\n ...renderRefsFieldLines(table.columns),\n ...renderUniqueFieldLines(table),\n ...(table.enableDrafts ? [\"enableDrafts: true;\"] : []),\n ...(table.enableForm\n ? [`submissionDescriptor: ${name}_Submission__Descriptor;`]\n : [\"submissionDescriptor: never;\"]),\n ]);\n}\n\nfunction renderCmsClient(config: CommonOrizmConfig): string {\n const tableEntries = config.tables\n .map(\n (t) =>\n `${t.name}: this.client.getTableClient<${toCodeTypeName(t.name)}__Descriptor>(\"${t.name}\"),`,\n )\n .join(\"\\n\");\n\n const bucketEntries = config.buckets\n .map((b) => `${b.name}: this.client.getBucketClient(\"${b.name}\"),`)\n .join(\"\\n\");\n\n return `export class CMSClient {\n constructor(protected client: OrizmCMSClient) {\n this.tables = {\n ${tableEntries}\n };\n\n this.buckets = {\n ${bucketEntries}\n };\n\n this.userManagement = this.client.userManagement;\n\n this.userinfo = this.client.userinfo;\n\n this.auth = this.client.auth;\n }\n\n readonly tables;\n readonly buckets;\n readonly userManagement;\n readonly userinfo;\n readonly auth;\n}`;\n}\n","import type { ArgsDef } from \"citty\";\nimport { defineCommand } from \"../define-command.js\";\nimport { contextArgs, configFileArg, DEFAULT_CONFIG_FILE } from \"../shared.js\";\nimport { renderCmsModule } from \"../../codegen/cms.js\";\nimport { runCodegen } from \"./run-codegen.js\";\n\nconst cmsArgs = {\n ...contextArgs,\n \"config-file\": configFileArg,\n output: {\n type: \"string\",\n alias: \"o\",\n description: \"Output file (.ts) or directory\",\n default: \"./src/orizm\",\n },\n pull: {\n type: \"boolean\",\n description:\n \"Generate from the server's applied definition instead of the local config\",\n default: false,\n },\n} satisfies ArgsDef;\n\nexport default defineCommand({\n meta: {\n name: \"cms\",\n description: \"Generate CMS SDK types from a schema definition\",\n },\n args: cmsArgs,\n run: ({ args }) =>\n runCodegen({\n args,\n pull: args.pull === true,\n configFile: args[\"config-file\"] ?? DEFAULT_CONFIG_FILE,\n output: args.output,\n label: \"CMS\",\n render: renderCmsModule,\n }),\n});\n"],"mappings":";;;;;AA4BA,SAAgB,gBAAgB,QAA4C;CAC1E,MAAM,mBAAkC,OAAO,OAC5C,QAAQ,MAAM,EAAE,UAAU,CAAC,CAC3B,KAAK,OAAO;EACX,MAAM,EAAE,OAAO;EACf,SAAS,EAAE,aAAa,qBAAqB,CAAC;EAC9C,eAAe;CACjB,EAAE;CACJ,MAAM,YAA2B,CAAC,GAAG,OAAO,QAAQ,GAAG,gBAAgB;CACvE,MAAM,UAAU,OAAO;CA0BvB,OAAO,qBAJQ;EApBC;GACd;GACA;GACA;GACA;EACF,CAAC,CAAC,KAAK,IAee;EAAG;EAbX;GACZ,cAAc,UAAU,UAAU,IAAI,gBAAgB,CAAC;GACvD,cAAc,gBAAgB,QAAQ,IAAI,iBAAiB,CAAC;GAC5D,0BACE,CACE,GAAG,UAAU,IAAI,qBAAqB,GACtC,QAAQ,IAAI,2BAA2B,CAAC,CAAC,KAAK,IAAI,CACpD,CAAC,CAAC,KAAK,MAAM;GACf,0BAA0B,SAAS;EACrC,CAAC,CACE,OAAO,OAAO,CAAC,CACf,KAAK,QAEgC;EAAG,gBAAgB,MAAM;CAAC,CAAC,CAAC,KAClE,QAG+B,CAAC;AACpC;AAEA,SAAS,iBAAiB,OAA4B;CACpD,MAAM,OAAO,MAAM;CACnB,MAAM,OAAO,eAAe,MAAM,IAAI;CA6DtC,OAAO;EA3DS,gBAAgB,MAAM;GACpC;GACA;GACA;GACA,GAAI,CAAC,MAAM,gBACP;IACE;IACA;IACA;IACA;IACA;IACA;GACF,IACA;IACE;IACA;IACA;IACA;GACF;GACJ,GAAG,KAAK,KAAK,QAAQ,kBAAkB,GAAG,CAAC;GAC3C,GAAI,MAAM,aAAa,CAAC,kCAAkC,IAAI,CAAC;EACjE,CAsCc;EApCK,gBAAgB,GAAG,KAAK,cAAc;GACvD,GAAI,CAAC,MAAM,gBACP;IACE;IACA;IACA;IACA;IACA;GACF,IACA,CAAC;GACL,GAAG,KAAK,KAAK,QACX,kBAAkB,KAAK;IACrB,UAAU,CAAC,IAAI;IACf,QAAQ;GACV,CAAC,CACH;GACA,GAAI,MAAM,aAAa,CAAC,kCAAkC,IAAI,CAAC;EACjE,CAmB0B;EAjBP,gBAAgB,GAAG,KAAK,cAAc;GACvD,GAAG,KACA,QAAQ,QAAQ,CAAC,IAAI,QAAQ,CAAC,CAC9B,KAAK,QACJ,kBAAkB,KAAK;IAAE,UAAU;IAAM,QAAQ;GAAc,CAAC,CAClE;GACF,GAAI,CAAC,MAAM,gBACP;IACE;IACA;IACA;IACA;GACF,IACA,CAAC;GACL,GAAI,MAAM,aAAa,CAAC,kCAAkC,IAAI,CAAC;EACjE,CAEsC;CAAC,CAAC,CAAC,KAAK,MAAM;AACtD;AAEA,SAAS,kBAAkB,KAGhB;CACT,MAAM,OAAO,eAAe,IAAI,IAAI;CACpC,MAAM,OAAO,IAAI;CAuBjB,OAAO;EArBS,yBAAyB,GAqB3B;EAnBK,gBAAgB,GAAG,KAAK,cAAc,CACvD,GAAG,KAAK,KAAK,QACX,kBAAkB,KAAK;GACrB,UAAU,CAAC,IAAI;GACf,QAAQ;EACV,CAAC,CACH,CACF,CAY0B;EAVP,gBAAgB,GAAG,KAAK,cAAc,CACvD,gBACA,GAAG,KAAK,KAAK,QACX,kBAAkB,KAAK;GACrB,UAAU,CAAC,IAAI;GACf,QAAQ;EACV,CAAC,CACH,CACF,CAEsC;CAAC,CAAC,CAAC,KAAK,MAAM;AACtD;AAEA,SAAS,sBAAsB,OAA4B;CACzD,MAAM,OAAO,eAAe,MAAM,IAAI;CACtC,OAAO,gBAAgB,GAAG,KAAK,eAAe;EAC5C,QAAQ,KAAK;EACb,WAAW,KAAK;EAChB,WAAW,KAAK;EAChB,GAAG,qBAAqB,MAAM,OAAO;EACrC,GAAG,uBAAuB,KAAK;EAC/B,GAAI,MAAM,eAAe,CAAC,qBAAqB,IAAI,CAAC;EACpD,GAAI,MAAM,aACN,CAAC,yBAAyB,KAAK,yBAAyB,IACxD,CAAC,8BAA8B;CACrC,CAAC;AACH;AAEA,SAAS,gBAAgB,QAAmC;CAY1D,OAAO;;;QAXc,OAAO,OACzB,KACE,MACC,GAAG,EAAE,KAAK,+BAA+B,eAAe,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,IAC5F,CAAC,CACA,KAAK,IASS,EAAE;;;;QAPG,OAAO,QAC1B,KAAK,MAAM,GAAG,EAAE,KAAK,iCAAiC,EAAE,KAAK,IAAI,CAAC,CAClE,KAAK,IASU,EAAE;;;;;;;;;;;;;;;;AAgBtB;;;;AC/MA,MAAM,UAAU;CACd,GAAG;CACH,eAAe;CACf,QAAQ;EACN,MAAM;EACN,OAAO;EACP,aAAa;EACb,SAAS;CACX;CACA,MAAM;EACJ,MAAM;EACN,aACE;EACF,SAAS;CACX;AACF;AAEA,kBAAe,cAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,MAAM;CACN,MAAM,EAAE,WACN,WAAW;EACT;EACA,MAAM,KAAK,SAAS;EACpB,YAAY,KAAK;EACjB,QAAQ,KAAK;EACb,OAAO;EACP,QAAQ;CACV,CAAC;AACL,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cms-Cnx-lDGu.cjs","names":["formatTsWithPrettier","AUTOGEN_HEADER","UTILITIES","renderSection","renderModuleDescriptorBlock","renderWebhookTypesSection","toCodeTypeName","renderTypeBlock","renderColumnField","renderModuleRowTypeBlock","renderRefsFieldLines","renderUniqueFieldLines","contextArgs","configFileArg","defineCommand","runCodegen"],"sources":["../src/cli/codegen/cms.ts","../src/cli/commands/codegen/cms.ts"],"sourcesContent":["import { CommonOrizmConfig } from \"../types.js\";\nimport { formatTsWithPrettier } from \"./format.js\";\nimport {\n AUTOGEN_HEADER,\n UTILITIES,\n RenderColumn,\n RenderIndex,\n toCodeTypeName,\n renderColumnField,\n renderTypeBlock,\n renderRefsFieldLines,\n renderUniqueFieldLines,\n renderModuleRowTypeBlock,\n renderModuleDescriptorBlock,\n renderSection,\n renderWebhookTypesSection,\n} from \"./render.js\";\n\ntype RenderTable = {\n name: string;\n columns: RenderColumn[];\n isSubmissions?: boolean;\n enableForm?: boolean;\n enableDrafts?: boolean;\n indexes?: RenderIndex[];\n formOptions?: { submissionColumns?: RenderColumn[] };\n};\n\nexport function renderCmsModule(config: CommonOrizmConfig): Promise<string> {\n const submissionTables: RenderTable[] = config.tables\n .filter((t) => t.enableForm)\n .map((t) => ({\n name: t.name + \"__submission\",\n columns: t.formOptions?.submissionColumns ?? [],\n isSubmissions: true,\n }));\n const allTables: RenderTable[] = [...config.tables, ...submissionTables];\n const modules = config.tableModules;\n\n const imports = [\n AUTOGEN_HEADER,\n \"\",\n 'import { FormValidationRules, StorageItemType } from \"@orizm/cms-sdk/common\";',\n 'import { OrizmCMSClient } from \"@orizm/cms-sdk\";',\n ].join(\"\\n\");\n\n const types = [\n renderSection(\"Tables\", allTables.map(renderTableTypes)),\n renderSection(\"Module types\", modules.map(renderModuleTypes)),\n \"// Descriptor types\\n\" +\n [\n ...allTables.map(renderTableDescriptor),\n modules.map(renderModuleDescriptorBlock).join(\"\\n\"),\n ].join(\"\\n\\n\"),\n renderWebhookTypesSection(allTables),\n ]\n .filter(Boolean)\n .join(\"\\n\\n\\n\");\n\n const source = [imports, UTILITIES, types, renderCmsClient(config)].join(\n \"\\n\\n\\n\",\n );\n\n return formatTsWithPrettier(source);\n}\n\nfunction renderTableTypes(table: RenderTable): string {\n const cols = table.columns;\n const name = toCodeTypeName(table.name);\n\n const rowType = renderTypeBlock(name, [\n \"id: string;\",\n \"createdAt: string;\",\n \"updatedAt: string;\",\n ...(!table.isSubmissions\n ? [\n \"group: string | null;\",\n \"publishedAt: string | null;\",\n \"_draft: boolean | null;\",\n \"_published: boolean | null;\",\n \"scheduledPublishAt: string | null;\",\n \"scheduledUnpublishAt: string | null;\",\n ]\n : [\n \"_formId: string;\",\n \"_content: unknown;\",\n \"_formSchema: unknown;\",\n \"_attachments: StorageItemType[];\",\n ]),\n ...cols.map((col) => renderColumnField(col)),\n ...(table.enableForm ? [\"formSchema: FormValidationRules;\"] : []),\n ]);\n\n const createType = renderTypeBlock(`${name}CreateInput`, [\n ...(!table.isSubmissions\n ? [\n \"group?: string | null;\",\n \"publishedAt?: string | null;\",\n \"scheduledPublishAt?: string | null;\",\n \"scheduledUnpublishAt?: string | null;\",\n \"createdAt?: string;\",\n ]\n : []),\n ...cols.map((col) =>\n renderColumnField(col, {\n optional: !col.required,\n suffix: \"CreateInput\",\n }),\n ),\n ...(table.enableForm ? [\"formSchema: FormValidationRules;\"] : []),\n ]);\n\n const updateType = renderTypeBlock(`${name}UpdateInput`, [\n ...cols\n .filter((col) => !col.readOnly)\n .map((col) =>\n renderColumnField(col, { optional: true, suffix: \"UpdateInput\" }),\n ),\n ...(!table.isSubmissions\n ? [\n \"publishedAt?: string | null;\",\n \"scheduledPublishAt?: string | null;\",\n \"scheduledUnpublishAt?: string | null;\",\n \"createdAt?: string;\",\n ]\n : []),\n ...(table.enableForm ? [\"formSchema: FormValidationRules;\"] : []),\n ]);\n\n return [rowType, createType, updateType].join(\"\\n\\n\");\n}\n\nfunction renderModuleTypes(mod: {\n name: string;\n columns: RenderColumn[];\n}): string {\n const name = toCodeTypeName(mod.name);\n const cols = mod.columns;\n\n const rowType = renderModuleRowTypeBlock(mod);\n\n const createType = renderTypeBlock(`${name}CreateInput`, [\n ...cols.map((col) =>\n renderColumnField(col, {\n optional: !col.required,\n suffix: \"CreateInput\",\n }),\n ),\n ]);\n\n const updateType = renderTypeBlock(`${name}UpdateInput`, [\n \"id?: string;\",\n ...cols.map((col) =>\n renderColumnField(col, {\n optional: !col.required,\n suffix: \"UpdateInput\",\n }),\n ),\n ]);\n\n return [rowType, createType, updateType].join(\"\\n\\n\");\n}\n\nfunction renderTableDescriptor(table: RenderTable): string {\n const name = toCodeTypeName(table.name);\n return renderTypeBlock(`${name}__Descriptor`, [\n `row: ${name};`,\n `create: ${name}CreateInput;`,\n `update: ${name}UpdateInput;`,\n ...renderRefsFieldLines(table.columns),\n ...renderUniqueFieldLines(table),\n ...(table.enableDrafts ? [\"enableDrafts: true;\"] : []),\n ...(table.enableForm\n ? [`submissionDescriptor: ${name}_Submission__Descriptor;`]\n : [\"submissionDescriptor: never;\"]),\n ]);\n}\n\nfunction renderCmsClient(config: CommonOrizmConfig): string {\n const tableEntries = config.tables\n .map(\n (t) =>\n `${t.name}: this.client.getTableClient<${toCodeTypeName(t.name)}__Descriptor>(\"${t.name}\"),`,\n )\n .join(\"\\n\");\n\n const bucketEntries = config.buckets\n .map((b) => `${b.name}: this.client.getBucketClient(\"${b.name}\"),`)\n .join(\"\\n\");\n\n return `export class CMSClient {\n constructor(protected client: OrizmCMSClient) {\n this.tables = {\n ${tableEntries}\n };\n\n this.buckets = {\n ${bucketEntries}\n };\n\n this.userManagement = this.client.userManagement;\n\n this.userinfo = this.client.userinfo;\n\n this.auth = this.client.auth;\n }\n\n readonly tables;\n readonly buckets;\n readonly userManagement;\n readonly userinfo;\n readonly auth;\n}`;\n}\n","import type { ArgsDef } from \"citty\";\nimport { defineCommand } from \"../define-command.js\";\nimport { contextArgs, configFileArg, DEFAULT_CONFIG_FILE } from \"../shared.js\";\nimport { renderCmsModule } from \"../../codegen/cms.js\";\nimport { runCodegen } from \"./run-codegen.js\";\n\nconst cmsArgs = {\n ...contextArgs,\n \"config-file\": configFileArg,\n output: {\n type: \"string\",\n alias: \"o\",\n description: \"Output file (.ts) or directory\",\n default: \"./src/orizm\",\n },\n pull: {\n type: \"boolean\",\n description:\n \"Generate from the server's applied definition instead of the local config\",\n default: false,\n },\n} satisfies ArgsDef;\n\nexport default defineCommand({\n meta: {\n name: \"cms\",\n description: \"Generate CMS SDK types from a schema definition\",\n },\n args: cmsArgs,\n run: ({ args }) =>\n runCodegen({\n args,\n pull: args.pull === true,\n configFile: args[\"config-file\"] ?? DEFAULT_CONFIG_FILE,\n output: args.output,\n label: \"CMS\",\n render: renderCmsModule,\n }),\n});\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"consumer-OF6Z_eTP.cjs","names":["formatTsWithPrettier","AUTOGEN_HEADER","UTILITIES","renderSection","renderModuleRowTypeBlock","renderModuleDescriptorBlock","renderWebhookTypesSection","renderTypeBlock","toCodeTypeName","renderColumnField","renderRefsFieldLines","renderUniqueFieldLines","contextArgs","configFileArg","defineCommand","runCodegen"],"sources":["../src/cli/codegen/consumer.ts","../src/cli/commands/codegen/consumer.ts"],"sourcesContent":["import { CommonOrizmConfig } from \"../types.js\";\nimport { formatTsWithPrettier } from \"./format.js\";\nimport {\n AUTOGEN_HEADER,\n UTILITIES,\n RenderColumn,\n RenderIndex,\n toCodeTypeName,\n renderColumnField,\n renderTypeBlock,\n renderRefsFieldLines,\n renderUniqueFieldLines,\n renderModuleRowTypeBlock,\n renderModuleDescriptorBlock,\n renderSection,\n renderWebhookTypesSection,\n} from \"./render.js\";\n\ntype RenderTable = {\n name: string;\n columns: RenderColumn[];\n enableForm?: boolean;\n enableDrafts?: boolean;\n indexes?: RenderIndex[];\n};\n\nexport function renderConsumerModule(\n config: CommonOrizmConfig,\n): Promise<string> {\n const tables: RenderTable[] = config.tables;\n const modules = config.tableModules;\n\n const imports = [\n AUTOGEN_HEADER,\n \"\",\n 'import { FormValidationRules, StorageItemType } from \"@orizm/consumer-sdk/common\";',\n 'import { ConsumerClientOptions, OrizmConsumerClientBase } from \"@orizm/consumer-sdk\";',\n ].join(\"\\n\");\n\n const types = [\n renderSection(\"Tables\", tables.map(renderTableRowType)),\n modules.map(renderModuleRowTypeBlock).join(\"\\n\\n\"),\n renderSection(\"Descriptor types\", [\n ...tables.map(renderTableDescriptor),\n ...modules.map(renderModuleDescriptorBlock),\n ]),\n renderWebhookTypesSection(tables),\n ]\n .filter(Boolean)\n .join(\"\\n\\n\\n\");\n\n const source = [imports, UTILITIES, types, renderConsumerClient(config)].join(\n \"\\n\\n\\n\",\n );\n\n return formatTsWithPrettier(source);\n}\n\nfunction renderTableRowType(table: RenderTable): string {\n return renderTypeBlock(toCodeTypeName(table.name), [\n \"id: string;\",\n \"createdAt: string;\",\n \"updatedAt: string;\",\n \"group: string | null;\",\n \"publishedAt: string | null;\",\n \"_draft: boolean | null;\",\n \"_published: boolean | null;\",\n ...table.columns.map((col) => renderColumnField(col)),\n ...(table.enableForm ? [\"formSchema: FormValidationRules;\"] : []),\n ]);\n}\n\nfunction renderTableDescriptor(table: RenderTable): string {\n const name = toCodeTypeName(table.name);\n return renderTypeBlock(`${name}__Descriptor`, [\n `row: ${name};`,\n ...renderRefsFieldLines(table.columns),\n ...renderUniqueFieldLines(table),\n ...(table.enableDrafts ? [\"enableDrafts: true;\"] : []),\n ]);\n}\n\nfunction renderConsumerClient(config: CommonOrizmConfig): string {\n const tableEntries = config.tables\n .map(\n (t) =>\n `${t.name}: this.getTableClient<${toCodeTypeName(t.name)}__Descriptor>(\"${t.name}\"),`,\n )\n .join(\"\\n\");\n\n return `export class OrizmClient extends OrizmConsumerClientBase {\n constructor(options: ConsumerClientOptions) {\n super(options);\n }\n\n readonly tables = {\n ${tableEntries}\n };\n}`;\n}\n","import type { ArgsDef } from \"citty\";\nimport { defineCommand } from \"../define-command.js\";\nimport { contextArgs, configFileArg, DEFAULT_CONFIG_FILE } from \"../shared.js\";\nimport { renderConsumerModule } from \"../../codegen/consumer.js\";\nimport { runCodegen } from \"./run-codegen.js\";\n\nconst consumerArgs = {\n ...contextArgs,\n \"config-file\": configFileArg,\n output: {\n type: \"string\",\n alias: \"o\",\n description: \"Output file (.ts) or directory\",\n default: \"./src/orizm\",\n },\n pull: {\n type: \"boolean\",\n description:\n \"Generate from the server's applied definition instead of the local config\",\n default: false,\n },\n} satisfies ArgsDef;\n\nexport default defineCommand({\n meta: {\n name: \"consumer\",\n description: \"Generate Consumer SDK types from a schema definition\",\n },\n args: consumerArgs,\n run: ({ args }) =>\n runCodegen({\n args,\n pull: args.pull === true,\n configFile: args[\"config-file\"] ?? DEFAULT_CONFIG_FILE,\n output: args.output,\n label: \"Consumer\",\n render: renderConsumerModule,\n }),\n});\n"],"mappings":";;;;;AA0BA,SAAgB,qBACd,QACiB;CACjB,MAAM,SAAwB,OAAO;CACrC,MAAM,UAAU,OAAO;CAyBvB,OAAOA,yCAJQ;EAnBC;GACdC;GACA;GACA;GACA;EACF,CAAC,CAAC,KAAK,IAce;EAAGC;EAZX;GACZC,kCAAc,UAAU,OAAO,IAAI,kBAAkB,CAAC;GACtD,QAAQ,IAAIC,4CAAwB,CAAC,CAAC,KAAK,MAAM;GACjDD,kCAAc,oBAAoB,CAChC,GAAG,OAAO,IAAI,qBAAqB,GACnC,GAAG,QAAQ,IAAIE,+CAA2B,CAC5C,CAAC;GACDC,8CAA0B,MAAM;EAClC,CAAC,CACE,OAAO,OAAO,CAAC,CACf,KAAK,QAEgC;EAAG,qBAAqB,MAAM;CAAC,CAAC,CAAC,KACvE,QAG+B,CAAC;AACpC;AAEA,SAAS,mBAAmB,OAA4B;CACtD,OAAOC,oCAAgBC,mCAAe,MAAM,IAAI,GAAG;EACjD;EACA;EACA;EACA;EACA;EACA;EACA;EACA,GAAG,MAAM,QAAQ,KAAK,QAAQC,sCAAkB,GAAG,CAAC;EACpD,GAAI,MAAM,aAAa,CAAC,kCAAkC,IAAI,CAAC;CACjE,CAAC;AACH;AAEA,SAAS,sBAAsB,OAA4B;CACzD,MAAM,OAAOD,mCAAe,MAAM,IAAI;CACtC,OAAOD,oCAAgB,GAAG,KAAK,eAAe;EAC5C,QAAQ,KAAK;EACb,GAAGG,yCAAqB,MAAM,OAAO;EACrC,GAAGC,2CAAuB,KAAK;EAC/B,GAAI,MAAM,eAAe,CAAC,qBAAqB,IAAI,CAAC;CACtD,CAAC;AACH;AAEA,SAAS,qBAAqB,QAAmC;CAQ/D,OAAO;;;;;;MAPc,OAAO,OACzB,KACE,MACC,GAAG,EAAE,KAAK,wBAAwBH,mCAAe,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,IACrF,CAAC,CACA,KAAK,IAQO,EAAE;;;AAGnB;;;;AC7FA,MAAM,eAAe;CACnB,GAAGI;CACH,eAAeC;CACf,QAAQ;EACN,MAAM;EACN,OAAO;EACP,aAAa;EACb,SAAS;CACX;CACA,MAAM;EACJ,MAAM;EACN,aACE;EACF,SAAS;CACX;AACF;AAEA,uBAAeC,+BAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,MAAM;CACN,MAAM,EAAE,WACNC,+BAAW;EACT;EACA,MAAM,KAAK,SAAS;EACpB,YAAY,KAAK;EACjB,QAAQ,KAAK;EACb,OAAO;EACP,QAAQ;CACV,CAAC;AACL,CAAC"}
@@ -1,18 +0,0 @@
1
- const require_cli_main = require('./cli/main.cjs');
2
-
3
- //#region src/cli/commands/key/consumer/index.ts
4
- var consumer_default = require_cli_main.defineCommand({
5
- meta: {
6
- name: "consumer",
7
- description: "Manage consumer keys (public read-only access)"
8
- },
9
- subCommands: {
10
- list: () => Promise.resolve().then(() => require("./list-DlJssPwy.cjs")).then((m) => m.default),
11
- create: () => Promise.resolve().then(() => require("./create-BNYWcyuQ.cjs")).then((m) => m.default),
12
- delete: () => Promise.resolve().then(() => require("./delete-D4r1ve4v.cjs")).then((m) => m.default)
13
- }
14
- });
15
-
16
- //#endregion
17
- exports.default = consumer_default;
18
- //# sourceMappingURL=consumer-l-8wUK8E.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"consumer-pU2HyiyA.mjs","names":[],"sources":["../src/cli/codegen/consumer.ts","../src/cli/commands/codegen/consumer.ts"],"sourcesContent":["import { CommonOrizmConfig } from \"../types.js\";\nimport { formatTsWithPrettier } from \"./format.js\";\nimport {\n AUTOGEN_HEADER,\n UTILITIES,\n RenderColumn,\n RenderIndex,\n toCodeTypeName,\n renderColumnField,\n renderTypeBlock,\n renderRefsFieldLines,\n renderUniqueFieldLines,\n renderModuleRowTypeBlock,\n renderModuleDescriptorBlock,\n renderSection,\n renderWebhookTypesSection,\n} from \"./render.js\";\n\ntype RenderTable = {\n name: string;\n columns: RenderColumn[];\n enableForm?: boolean;\n enableDrafts?: boolean;\n indexes?: RenderIndex[];\n};\n\nexport function renderConsumerModule(\n config: CommonOrizmConfig,\n): Promise<string> {\n const tables: RenderTable[] = config.tables;\n const modules = config.tableModules;\n\n const imports = [\n AUTOGEN_HEADER,\n \"\",\n 'import { FormValidationRules, StorageItemType } from \"@orizm/consumer-sdk/common\";',\n 'import { ConsumerClientOptions, OrizmConsumerClientBase } from \"@orizm/consumer-sdk\";',\n ].join(\"\\n\");\n\n const types = [\n renderSection(\"Tables\", tables.map(renderTableRowType)),\n modules.map(renderModuleRowTypeBlock).join(\"\\n\\n\"),\n renderSection(\"Descriptor types\", [\n ...tables.map(renderTableDescriptor),\n ...modules.map(renderModuleDescriptorBlock),\n ]),\n renderWebhookTypesSection(tables),\n ]\n .filter(Boolean)\n .join(\"\\n\\n\\n\");\n\n const source = [imports, UTILITIES, types, renderConsumerClient(config)].join(\n \"\\n\\n\\n\",\n );\n\n return formatTsWithPrettier(source);\n}\n\nfunction renderTableRowType(table: RenderTable): string {\n return renderTypeBlock(toCodeTypeName(table.name), [\n \"id: string;\",\n \"createdAt: string;\",\n \"updatedAt: string;\",\n \"group: string | null;\",\n \"publishedAt: string | null;\",\n \"_draft: boolean | null;\",\n \"_published: boolean | null;\",\n ...table.columns.map((col) => renderColumnField(col)),\n ...(table.enableForm ? [\"formSchema: FormValidationRules;\"] : []),\n ]);\n}\n\nfunction renderTableDescriptor(table: RenderTable): string {\n const name = toCodeTypeName(table.name);\n return renderTypeBlock(`${name}__Descriptor`, [\n `row: ${name};`,\n ...renderRefsFieldLines(table.columns),\n ...renderUniqueFieldLines(table),\n ...(table.enableDrafts ? [\"enableDrafts: true;\"] : []),\n ]);\n}\n\nfunction renderConsumerClient(config: CommonOrizmConfig): string {\n const tableEntries = config.tables\n .map(\n (t) =>\n `${t.name}: this.getTableClient<${toCodeTypeName(t.name)}__Descriptor>(\"${t.name}\"),`,\n )\n .join(\"\\n\");\n\n return `export class OrizmClient extends OrizmConsumerClientBase {\n constructor(options: ConsumerClientOptions) {\n super(options);\n }\n\n readonly tables = {\n ${tableEntries}\n };\n}`;\n}\n","import type { ArgsDef } from \"citty\";\nimport { defineCommand } from \"../define-command.js\";\nimport { contextArgs, configFileArg, DEFAULT_CONFIG_FILE } from \"../shared.js\";\nimport { renderConsumerModule } from \"../../codegen/consumer.js\";\nimport { runCodegen } from \"./run-codegen.js\";\n\nconst consumerArgs = {\n ...contextArgs,\n \"config-file\": configFileArg,\n output: {\n type: \"string\",\n alias: \"o\",\n description: \"Output file (.ts) or directory\",\n default: \"./src/orizm\",\n },\n pull: {\n type: \"boolean\",\n description:\n \"Generate from the server's applied definition instead of the local config\",\n default: false,\n },\n} satisfies ArgsDef;\n\nexport default defineCommand({\n meta: {\n name: \"consumer\",\n description: \"Generate Consumer SDK types from a schema definition\",\n },\n args: consumerArgs,\n run: ({ args }) =>\n runCodegen({\n args,\n pull: args.pull === true,\n configFile: args[\"config-file\"] ?? DEFAULT_CONFIG_FILE,\n output: args.output,\n label: \"Consumer\",\n render: renderConsumerModule,\n }),\n});\n"],"mappings":";;;;;AA0BA,SAAgB,qBACd,QACiB;CACjB,MAAM,SAAwB,OAAO;CACrC,MAAM,UAAU,OAAO;CAyBvB,OAAO,qBAJQ;EAnBC;GACd;GACA;GACA;GACA;EACF,CAAC,CAAC,KAAK,IAce;EAAG;EAZX;GACZ,cAAc,UAAU,OAAO,IAAI,kBAAkB,CAAC;GACtD,QAAQ,IAAI,wBAAwB,CAAC,CAAC,KAAK,MAAM;GACjD,cAAc,oBAAoB,CAChC,GAAG,OAAO,IAAI,qBAAqB,GACnC,GAAG,QAAQ,IAAI,2BAA2B,CAC5C,CAAC;GACD,0BAA0B,MAAM;EAClC,CAAC,CACE,OAAO,OAAO,CAAC,CACf,KAAK,QAEgC;EAAG,qBAAqB,MAAM;CAAC,CAAC,CAAC,KACvE,QAG+B,CAAC;AACpC;AAEA,SAAS,mBAAmB,OAA4B;CACtD,OAAO,gBAAgB,eAAe,MAAM,IAAI,GAAG;EACjD;EACA;EACA;EACA;EACA;EACA;EACA;EACA,GAAG,MAAM,QAAQ,KAAK,QAAQ,kBAAkB,GAAG,CAAC;EACpD,GAAI,MAAM,aAAa,CAAC,kCAAkC,IAAI,CAAC;CACjE,CAAC;AACH;AAEA,SAAS,sBAAsB,OAA4B;CACzD,MAAM,OAAO,eAAe,MAAM,IAAI;CACtC,OAAO,gBAAgB,GAAG,KAAK,eAAe;EAC5C,QAAQ,KAAK;EACb,GAAG,qBAAqB,MAAM,OAAO;EACrC,GAAG,uBAAuB,KAAK;EAC/B,GAAI,MAAM,eAAe,CAAC,qBAAqB,IAAI,CAAC;CACtD,CAAC;AACH;AAEA,SAAS,qBAAqB,QAAmC;CAQ/D,OAAO;;;;;;MAPc,OAAO,OACzB,KACE,MACC,GAAG,EAAE,KAAK,wBAAwB,eAAe,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,IACrF,CAAC,CACA,KAAK,IAQO,EAAE;;;AAGnB;;;;AC7FA,MAAM,eAAe;CACnB,GAAG;CACH,eAAe;CACf,QAAQ;EACN,MAAM;EACN,OAAO;EACP,aAAa;EACb,SAAS;CACX;CACA,MAAM;EACJ,MAAM;EACN,aACE;EACF,SAAS;CACX;AACF;AAEA,uBAAe,cAAc;CAC3B,MAAM;EACJ,MAAM;EACN,aAAa;CACf;CACA,MAAM;CACN,MAAM,EAAE,WACN,WAAW;EACT;EACA,MAAM,KAAK,SAAS;EACpB,YAAY,KAAK;EACjB,QAAQ,KAAK;EACb,OAAO;EACP,QAAQ;CACV,CAAC;AACL,CAAC"}
@@ -1,20 +0,0 @@
1
- import { t as defineCommand } from "./cli/main.mjs";
2
-
3
- //#region src/cli/commands/content/index.ts
4
- var content_default = defineCommand({
5
- meta: {
6
- name: "content",
7
- description: "Manage table contents"
8
- },
9
- subCommands: {
10
- list: () => import("./list-B0N4-Q-5.mjs").then((m) => m.default),
11
- get: () => import("./get-DB80UNSR.mjs").then((m) => m.default),
12
- create: () => import("./create-Belwettw.mjs").then((m) => m.default),
13
- update: () => import("./update-rzij1b_o.mjs").then((m) => m.default),
14
- delete: () => import("./delete-CSs5Czlo.mjs").then((m) => m.default)
15
- }
16
- });
17
-
18
- //#endregion
19
- export { content_default as default };
20
- //# sourceMappingURL=content-BOb6NC8M.mjs.map
@@ -1,20 +0,0 @@
1
- const require_cli_main = require('./cli/main.cjs');
2
-
3
- //#region src/cli/commands/content/index.ts
4
- var content_default = require_cli_main.defineCommand({
5
- meta: {
6
- name: "content",
7
- description: "Manage table contents"
8
- },
9
- subCommands: {
10
- list: () => Promise.resolve().then(() => require("./list-CU42ERNY.cjs")).then((m) => m.default),
11
- get: () => Promise.resolve().then(() => require("./get-KdWfYINc.cjs")).then((m) => m.default),
12
- create: () => Promise.resolve().then(() => require("./create-DJY71sp9.cjs")).then((m) => m.default),
13
- update: () => Promise.resolve().then(() => require("./update-Cx_2GkQj.cjs")).then((m) => m.default),
14
- delete: () => Promise.resolve().then(() => require("./delete-8yZ3j0vX.cjs")).then((m) => m.default)
15
- }
16
- });
17
-
18
- //#endregion
19
- exports.default = content_default;
20
- //# sourceMappingURL=content-DMjSwor1.cjs.map