@orizm/cli 3.1.0 → 3.3.0-beta.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 (379) hide show
  1. package/README.md +27 -1
  2. package/dist/agent-Kf8iuW2I.mjs +14 -0
  3. package/dist/agent-Kf8iuW2I.mjs.map +1 -0
  4. package/dist/agent-UZZtdOZS.cjs +14 -0
  5. package/dist/agent-UZZtdOZS.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-BJnovGYT.mjs → cms-8XZhxwsM.mjs} +8 -5
  19. package/dist/cms-8XZhxwsM.mjs.map +1 -0
  20. package/dist/{cms-Cnx-lDGu.cjs → cms-C4zEtppZ.cjs} +8 -5
  21. package/dist/cms-C4zEtppZ.cjs.map +1 -0
  22. package/dist/{codegen-BF5b-u46.cjs → codegen-Cypg4O3L.cjs} +3 -3
  23. package/dist/{codegen-BF5b-u46.cjs.map → codegen-Cypg4O3L.cjs.map} +1 -1
  24. package/dist/{codegen-DZOB4ttR.mjs → codegen-Dnjv7zfm.mjs} +3 -3
  25. package/dist/{codegen-DZOB4ttR.mjs.map → codegen-Dnjv7zfm.mjs.map} +1 -1
  26. package/dist/config/index.cjs +4 -2
  27. package/dist/config/index.cjs.map +1 -1
  28. package/dist/config/index.d.mts +8 -1
  29. package/dist/config/index.d.mts.map +1 -1
  30. package/dist/config/index.mjs +4 -2
  31. package/dist/config/index.mjs.map +1 -1
  32. package/dist/{config-loader-D8x32gEU.cjs → config-loader-CZfANHBf.cjs} +2 -2
  33. package/dist/config-loader-CZfANHBf.cjs.map +1 -0
  34. package/dist/{config-loader-BEgS869e.mjs → config-loader-CtbZOGjc.mjs} +3 -3
  35. package/dist/config-loader-CtbZOGjc.mjs.map +1 -0
  36. package/dist/{confirm-delete-B9o73U7B.cjs → confirm-delete-BX8bJrXZ.cjs} +3 -3
  37. package/dist/{confirm-delete-B9o73U7B.cjs.map → confirm-delete-BX8bJrXZ.cjs.map} +1 -1
  38. package/dist/{confirm-delete-CsWkW69-.mjs → confirm-delete-CcKLYuCB.mjs} +2 -2
  39. package/dist/{confirm-delete-CsWkW69-.mjs.map → confirm-delete-CcKLYuCB.mjs.map} +1 -1
  40. package/dist/{consumer-C4WiGHWG.mjs → consumer-BAM3E_68.mjs} +4 -4
  41. package/dist/{consumer-C4WiGHWG.mjs.map → consumer-BAM3E_68.mjs.map} +1 -1
  42. package/dist/{consumer-OF6Z_eTP.cjs → consumer-BSgriLn0.cjs} +4 -4
  43. package/dist/consumer-BSgriLn0.cjs.map +1 -0
  44. package/dist/consumer-D-Y6KJ8a.cjs +18 -0
  45. package/dist/{consumer-l-8wUK8E.cjs.map → consumer-D-Y6KJ8a.cjs.map} +1 -1
  46. package/dist/{consumer-pU2HyiyA.mjs → consumer-s8LnLw4e.mjs} +4 -4
  47. package/dist/consumer-s8LnLw4e.mjs.map +1 -0
  48. package/dist/content-ClRuLcGq.cjs +20 -0
  49. package/dist/{content-DMjSwor1.cjs.map → content-ClRuLcGq.cjs.map} +1 -1
  50. package/dist/content-DWnYo6ad.mjs +20 -0
  51. package/dist/{content-BOb6NC8M.mjs.map → content-DWnYo6ad.mjs.map} +1 -1
  52. package/dist/{create-DJY71sp9.cjs → create-B3d4CDel.cjs} +2 -2
  53. package/dist/{create-DJY71sp9.cjs.map → create-B3d4CDel.cjs.map} +1 -1
  54. package/dist/{create-CC814ixh.mjs → create-BD6iS4n6.mjs} +2 -2
  55. package/dist/{create-CC814ixh.mjs.map → create-BD6iS4n6.mjs.map} +1 -1
  56. package/dist/{create-B-PAOor6.mjs → create-BGV3F44O.mjs} +3 -3
  57. package/dist/{create-B-PAOor6.mjs.map → create-BGV3F44O.mjs.map} +1 -1
  58. package/dist/{create-Z-z3LXNW.cjs → create-BYDbsUvw.cjs} +3 -3
  59. package/dist/{create-Z-z3LXNW.cjs.map → create-BYDbsUvw.cjs.map} +1 -1
  60. package/dist/{create-Belwettw.mjs → create-BtuS23L3.mjs} +2 -2
  61. package/dist/{create-Belwettw.mjs.map → create-BtuS23L3.mjs.map} +1 -1
  62. package/dist/{create-CCsn7yp5.cjs → create-CNDCTpi0.cjs} +3 -3
  63. package/dist/{create-CCsn7yp5.cjs.map → create-CNDCTpi0.cjs.map} +1 -1
  64. package/dist/{create-BNYWcyuQ.cjs → create-DzRMGpm_.cjs} +2 -2
  65. package/dist/{create-BNYWcyuQ.cjs.map → create-DzRMGpm_.cjs.map} +1 -1
  66. package/dist/{create-B1ZBOqcV.mjs → create-fweRd0UB.mjs} +2 -2
  67. package/dist/{create-B1ZBOqcV.mjs.map → create-fweRd0UB.mjs.map} +1 -1
  68. package/dist/{create-D5suBd3J.mjs → create-m5fNBqQE.mjs} +3 -3
  69. package/dist/{create-D5suBd3J.mjs.map → create-m5fNBqQE.mjs.map} +1 -1
  70. package/dist/{create-CmOriwGo.cjs → create-tWGEtI3t.cjs} +2 -2
  71. package/dist/{create-CmOriwGo.cjs.map → create-tWGEtI3t.cjs.map} +1 -1
  72. package/dist/{delete-DhSU-Lx2.mjs → delete-B8VlzzCj.mjs} +3 -3
  73. package/dist/{delete-DhSU-Lx2.mjs.map → delete-B8VlzzCj.mjs.map} +1 -1
  74. package/dist/{delete-DVrafka1.cjs → delete-B9j8c8ln.cjs} +3 -3
  75. package/dist/{delete-DVrafka1.cjs.map → delete-B9j8c8ln.cjs.map} +1 -1
  76. package/dist/{delete-ZIifaG0i.mjs → delete-BhJK-8vE.mjs} +3 -3
  77. package/dist/{delete-ZIifaG0i.mjs.map → delete-BhJK-8vE.mjs.map} +1 -1
  78. package/dist/{delete-YYh_0khQ.mjs → delete-Bi6UhAhS.mjs} +3 -3
  79. package/dist/{delete-YYh_0khQ.mjs.map → delete-Bi6UhAhS.mjs.map} +1 -1
  80. package/dist/{delete-CCTiCYIL.cjs → delete-C_oxZa_p.cjs} +3 -3
  81. package/dist/{delete-CCTiCYIL.cjs.map → delete-C_oxZa_p.cjs.map} +1 -1
  82. package/dist/{delete-CSs5Czlo.mjs → delete-Ci7cq3mU.mjs} +3 -3
  83. package/dist/{delete-CSs5Czlo.mjs.map → delete-Ci7cq3mU.mjs.map} +1 -1
  84. package/dist/{delete-XWJRhBFs.mjs → delete-CiWkGnog.mjs} +3 -3
  85. package/dist/{delete-XWJRhBFs.mjs.map → delete-CiWkGnog.mjs.map} +1 -1
  86. package/dist/{delete-DozSxZQ7.cjs → delete-Cmk80aqF.cjs} +3 -3
  87. package/dist/{delete-DozSxZQ7.cjs.map → delete-Cmk80aqF.cjs.map} +1 -1
  88. package/dist/{delete-8yZ3j0vX.cjs → delete-CvtvB2Cr.cjs} +3 -3
  89. package/dist/{delete-8yZ3j0vX.cjs.map → delete-CvtvB2Cr.cjs.map} +1 -1
  90. package/dist/{delete-CIYY59v_.cjs → delete-DG825UwK.cjs} +4 -3
  91. package/dist/{delete-CIYY59v_.cjs.map → delete-DG825UwK.cjs.map} +1 -1
  92. package/dist/{delete-WpMIIvjj.cjs → delete-DGrSMqOt.cjs} +3 -3
  93. package/dist/{delete-WpMIIvjj.cjs.map → delete-DGrSMqOt.cjs.map} +1 -1
  94. package/dist/{delete-BOUObrDw.mjs → delete-Datr3Kqq.mjs} +3 -2
  95. package/dist/{delete-BOUObrDw.mjs.map → delete-Datr3Kqq.mjs.map} +1 -1
  96. package/dist/{delete-D4r1ve4v.cjs → delete-TTF4pIKw.cjs} +3 -3
  97. package/dist/{delete-D4r1ve4v.cjs.map → delete-TTF4pIKw.cjs.map} +1 -1
  98. package/dist/{delete-BSLIXrAh.mjs → delete-X8iVsETw.mjs} +3 -3
  99. package/dist/{delete-BSLIXrAh.mjs.map → delete-X8iVsETw.mjs.map} +1 -1
  100. package/dist/docs/features/cli/authentication.md +93 -0
  101. package/dist/docs/features/cli/commands/agent.md +49 -0
  102. package/dist/docs/features/cli/commands/auth.md +36 -0
  103. package/dist/docs/features/cli/commands/bucket.md +120 -0
  104. package/dist/docs/features/cli/commands/codegen.md +51 -0
  105. package/dist/docs/features/cli/commands/content.md +117 -0
  106. package/dist/docs/features/cli/commands/key.md +155 -0
  107. package/dist/docs/features/cli/commands/link.md +21 -0
  108. package/dist/docs/features/cli/commands/org.md +18 -0
  109. package/dist/docs/features/cli/commands/project-user.md +108 -0
  110. package/dist/docs/features/cli/commands/project.md +106 -0
  111. package/dist/docs/features/cli/commands/schema.md +108 -0
  112. package/dist/docs/features/cli/commands/webhook.md +110 -0
  113. package/dist/docs/features/cli/commands.md +110 -0
  114. package/dist/docs/features/cli/configuration.md +70 -0
  115. package/dist/docs/features/cli/output.md +53 -0
  116. package/dist/docs/features/cli/project-linking.md +58 -0
  117. package/dist/docs/features/cli/quickstart.md +83 -0
  118. package/dist/docs/features/cli.md +56 -0
  119. package/dist/docs/features/cms-sdk/account.md +122 -0
  120. package/dist/docs/features/cms-sdk/auth.md +122 -0
  121. package/dist/docs/features/cms-sdk/bucket.md +113 -0
  122. package/dist/docs/features/cms-sdk/cli.md +104 -0
  123. package/dist/docs/features/cms-sdk/fetch-contents.md +608 -0
  124. package/dist/docs/features/cms-sdk/install.md +98 -0
  125. package/dist/docs/features/cms-sdk/management-user.md +244 -0
  126. package/dist/docs/features/cms-sdk/migrate-to-v2.md +152 -0
  127. package/dist/docs/features/cms-sdk/mutation-contents.md +190 -0
  128. package/dist/docs/features/console/audit-logs.md +55 -0
  129. package/dist/docs/features/console/bucket.md +70 -0
  130. package/dist/docs/features/console/create-project.md +103 -0
  131. package/dist/docs/features/console/generate-api-key.md +103 -0
  132. package/dist/docs/features/console/invite-project-users.md +70 -0
  133. package/dist/docs/features/console/management-tables.md +131 -0
  134. package/dist/docs/features/console/organization-member-management.md +78 -0
  135. package/dist/docs/features/console/schema-history.md +29 -0
  136. package/dist/docs/features/console.md +15 -0
  137. package/dist/docs/features/consumer-sdk/cli.md +60 -0
  138. package/dist/docs/features/consumer-sdk/fetch-contents.md +603 -0
  139. package/dist/docs/features/consumer-sdk/install.md +90 -0
  140. package/dist/docs/features/consumer-sdk/migrate-to-v2.md +43 -0
  141. package/dist/docs/features/design-editor/about.md +36 -0
  142. package/dist/docs/features/design-editor/getting-started.md +244 -0
  143. package/dist/docs/features/design-editor/install.md +17 -0
  144. package/dist/docs/features/design-editor/prop-editor.md +83 -0
  145. package/dist/docs/features/design-editor/schema.md +279 -0
  146. package/dist/docs/features/dictionary.md +265 -0
  147. package/dist/docs/features/draft.md +241 -0
  148. package/dist/docs/features/form/about.md +83 -0
  149. package/dist/docs/features/form/editor.md +410 -0
  150. package/dist/docs/features/form/submission.md +94 -0
  151. package/dist/docs/features/full-text-search.md +114 -0
  152. package/dist/docs/features/history.md +152 -0
  153. package/dist/docs/features/schema/about.md +215 -0
  154. package/dist/docs/features/schema/authority.md +456 -0
  155. package/dist/docs/features/schema/bucket.md +142 -0
  156. package/dist/docs/features/schema/database.md +419 -0
  157. package/dist/docs/features/schema/table-module.md +140 -0
  158. package/dist/docs/features/webhook/revalidate-nextjs.md +185 -0
  159. package/dist/docs/features/webhook.md +295 -0
  160. package/dist/docs/get-started/add-model-starter.md +124 -0
  161. package/dist/docs/get-started/get-started-with-starter.md +218 -0
  162. package/dist/docs/index.md +89 -0
  163. package/dist/docs/introduction.md +140 -0
  164. package/dist/docs/manifest.json +6 -0
  165. package/dist/docs/resources/cli-migration-guide.md +82 -0
  166. package/dist/docs/resources/cli-v2-to-v3-migration-guide.md +138 -0
  167. package/dist/docs/resources/deploy-to-vercel.md +62 -0
  168. package/dist/docs/resources/limits.md +24 -0
  169. package/dist/docs/resources/private-registry.md +23 -0
  170. package/dist/docs/resources/status.md +22 -0
  171. package/dist/docs/resources/user-model.md +38 -0
  172. package/dist/{download-ogGbb3FU.cjs → download-BkzmfQXD.cjs} +2 -2
  173. package/dist/{download-ogGbb3FU.cjs.map → download-BkzmfQXD.cjs.map} +1 -1
  174. package/dist/{download-oFGzg30E.mjs → download-Dx1oyrMg.mjs} +2 -2
  175. package/dist/{download-oFGzg30E.mjs.map → download-Dx1oyrMg.mjs.map} +1 -1
  176. package/dist/{erd-zDoF6I_y.mjs → erd-BihhEfZ_.mjs} +3 -3
  177. package/dist/{erd-zDoF6I_y.mjs.map → erd-BihhEfZ_.mjs.map} +1 -1
  178. package/dist/{erd-lKC5NB2l.cjs → erd-DmnB1v2c.cjs} +3 -3
  179. package/dist/{erd-lKC5NB2l.cjs.map → erd-DmnB1v2c.cjs.map} +1 -1
  180. package/dist/{get-CgEgETQa.mjs → get-1TtxSEoT.mjs} +2 -2
  181. package/dist/{get-CgEgETQa.mjs.map → get-1TtxSEoT.mjs.map} +1 -1
  182. package/dist/{get-DjRyK0hJ.cjs → get-B5S1GfjR.cjs} +2 -2
  183. package/dist/{get-DjRyK0hJ.cjs.map → get-B5S1GfjR.cjs.map} +1 -1
  184. package/dist/{get-DDB89cOs.mjs → get-BLDHE_Zl.mjs} +2 -2
  185. package/dist/{get-DDB89cOs.mjs.map → get-BLDHE_Zl.mjs.map} +1 -1
  186. package/dist/{get-KdWfYINc.cjs → get-C5OH05Ka.cjs} +2 -2
  187. package/dist/{get-KdWfYINc.cjs.map → get-C5OH05Ka.cjs.map} +1 -1
  188. package/dist/{get-DwtzBjGV.cjs → get-CKZPn669.cjs} +2 -2
  189. package/dist/{get-DwtzBjGV.cjs.map → get-CKZPn669.cjs.map} +1 -1
  190. package/dist/{get-IOU__2RP.cjs → get-CdDZkUXV.cjs} +2 -2
  191. package/dist/{get-IOU__2RP.cjs.map → get-CdDZkUXV.cjs.map} +1 -1
  192. package/dist/{get-DB80UNSR.mjs → get-Cw4Dw5NG.mjs} +2 -2
  193. package/dist/{get-DB80UNSR.mjs.map → get-Cw4Dw5NG.mjs.map} +1 -1
  194. package/dist/{get-C7dKoSIc.mjs → get-Dy3AD4il.mjs} +2 -2
  195. package/dist/{get-C7dKoSIc.mjs.map → get-Dy3AD4il.mjs.map} +1 -1
  196. package/dist/{get-BBOKSXkh.cjs → get-PVsUGHBR.cjs} +2 -2
  197. package/dist/{get-BBOKSXkh.cjs.map → get-PVsUGHBR.cjs.map} +1 -1
  198. package/dist/{get-B6vBaq_D.mjs → get-Vo3yr12d.mjs} +2 -2
  199. package/dist/{get-B6vBaq_D.mjs.map → get-Vo3yr12d.mjs.map} +1 -1
  200. package/dist/{get-jwXRlIBJ.cjs → get-jaN2o0XY.cjs} +2 -2
  201. package/dist/{get-jwXRlIBJ.cjs.map → get-jaN2o0XY.cjs.map} +1 -1
  202. package/dist/{get-DBxhbN1G.mjs → get-qOKYAc46.mjs} +2 -2
  203. package/dist/{get-DBxhbN1G.mjs.map → get-qOKYAc46.mjs.map} +1 -1
  204. package/dist/init-BpKpTQ0z.mjs +425 -0
  205. package/dist/init-BpKpTQ0z.mjs.map +1 -0
  206. package/dist/init-BrZCChEG.cjs +427 -0
  207. package/dist/init-BrZCChEG.cjs.map +1 -0
  208. package/dist/{invite-DPygtCoO.cjs → invite-Tw3SMV0Q.cjs} +2 -2
  209. package/dist/{invite-DPygtCoO.cjs.map → invite-Tw3SMV0Q.cjs.map} +1 -1
  210. package/dist/{invite-D66DSMvq.mjs → invite-vzajkU2u.mjs} +2 -2
  211. package/dist/{invite-D66DSMvq.mjs.map → invite-vzajkU2u.mjs.map} +1 -1
  212. package/dist/{key-C71Ffll9.mjs → key-CyVxu3Uk.mjs} +3 -3
  213. package/dist/{key-C71Ffll9.mjs.map → key-CyVxu3Uk.mjs.map} +1 -1
  214. package/dist/{key-DQr7qRL2.cjs → key-tRYRqYNo.cjs} +3 -3
  215. package/dist/{key-DQr7qRL2.cjs.map → key-tRYRqYNo.cjs.map} +1 -1
  216. package/dist/{link-BluFyxEL.mjs → link-Bd55x5Zf.mjs} +2 -2
  217. package/dist/{link-BluFyxEL.mjs.map → link-Bd55x5Zf.mjs.map} +1 -1
  218. package/dist/{link-DYu1Vjlw.cjs → link-Cz7MX02S.cjs} +2 -2
  219. package/dist/{link-DYu1Vjlw.cjs.map → link-Cz7MX02S.cjs.map} +1 -1
  220. package/dist/{list-D5PSDMWw.mjs → list-2otVufvs.mjs} +3 -3
  221. package/dist/{list-D5PSDMWw.mjs.map → list-2otVufvs.mjs.map} +1 -1
  222. package/dist/{list-sQk00GV5.mjs → list-BMnBuZMr.mjs} +2 -2
  223. package/dist/{list-sQk00GV5.mjs.map → list-BMnBuZMr.mjs.map} +1 -1
  224. package/dist/{list-BwfpuhmJ.cjs → list-Bo8IMFd0.cjs} +2 -2
  225. package/dist/{list-BwfpuhmJ.cjs.map → list-Bo8IMFd0.cjs.map} +1 -1
  226. package/dist/{list-B0N4-Q-5.mjs → list-BtgAAUKm.mjs} +2 -2
  227. package/dist/{list-B0N4-Q-5.mjs.map → list-BtgAAUKm.mjs.map} +1 -1
  228. package/dist/{list-vbMaOiza.mjs → list-C0lq-gBZ.mjs} +2 -2
  229. package/dist/{list-vbMaOiza.mjs.map → list-C0lq-gBZ.mjs.map} +1 -1
  230. package/dist/{list-BsYYq9wT.mjs → list-CGZ3iT6J.mjs} +2 -2
  231. package/dist/{list-BsYYq9wT.mjs.map → list-CGZ3iT6J.mjs.map} +1 -1
  232. package/dist/{list-CFwW0G9f.cjs → list-CMWXO4nB.cjs} +2 -2
  233. package/dist/{list-CFwW0G9f.cjs.map → list-CMWXO4nB.cjs.map} +1 -1
  234. package/dist/{list-rAn3uOA7.mjs → list-Ccaec0cs.mjs} +2 -2
  235. package/dist/{list-rAn3uOA7.mjs.map → list-Ccaec0cs.mjs.map} +1 -1
  236. package/dist/{list-CU42ERNY.cjs → list-Cp_mHwbN.cjs} +2 -2
  237. package/dist/{list-CU42ERNY.cjs.map → list-Cp_mHwbN.cjs.map} +1 -1
  238. package/dist/{list-D0-QrWmn.cjs → list-Cs7kbAAi.cjs} +3 -3
  239. package/dist/{list-D0-QrWmn.cjs.map → list-Cs7kbAAi.cjs.map} +1 -1
  240. package/dist/{list-DlJssPwy.cjs → list-D5IaYurn.cjs} +2 -2
  241. package/dist/{list-DlJssPwy.cjs.map → list-D5IaYurn.cjs.map} +1 -1
  242. package/dist/{list-CbvEh7eA.mjs → list-DcIBInNA.mjs} +2 -2
  243. package/dist/{list-CbvEh7eA.mjs.map → list-DcIBInNA.mjs.map} +1 -1
  244. package/dist/{list-BzLraBnA.cjs → list-Dd3veD9Z.cjs} +2 -2
  245. package/dist/{list-BzLraBnA.cjs.map → list-Dd3veD9Z.cjs.map} +1 -1
  246. package/dist/{list-DexBclfb.cjs → list-DdVKKaDN.cjs} +2 -2
  247. package/dist/{list-DexBclfb.cjs.map → list-DdVKKaDN.cjs.map} +1 -1
  248. package/dist/{list-Br6Cmi9S.cjs → list-E1sjTZLe.cjs} +2 -2
  249. package/dist/{list-Br6Cmi9S.cjs.map → list-E1sjTZLe.cjs.map} +1 -1
  250. package/dist/{list-BRh59EqI.cjs → list-KI-7REC_.cjs} +2 -2
  251. package/dist/{list-BRh59EqI.cjs.map → list-KI-7REC_.cjs.map} +1 -1
  252. package/dist/{list-ocfd7631.mjs → list-MWD4huKP.mjs} +2 -2
  253. package/dist/{list-ocfd7631.mjs.map → list-MWD4huKP.mjs.map} +1 -1
  254. package/dist/{list-57TUfNFd.mjs → list-Pf5aAoaN.mjs} +2 -2
  255. package/dist/{list-57TUfNFd.mjs.map → list-Pf5aAoaN.mjs.map} +1 -1
  256. package/dist/{list-BHvURTWd.cjs → list-fG4zo8zz.cjs} +2 -2
  257. package/dist/{list-BHvURTWd.cjs.map → list-fG4zo8zz.cjs.map} +1 -1
  258. package/dist/{list-DrZYlidZ.mjs → list-r2UPz1zW.mjs} +2 -2
  259. package/dist/{list-DrZYlidZ.mjs.map → list-r2UPz1zW.mjs.map} +1 -1
  260. package/dist/{login-FE_dbWMo.mjs → login-Dq2L3bI7.mjs} +2 -2
  261. package/dist/{login-FE_dbWMo.mjs.map → login-Dq2L3bI7.mjs.map} +1 -1
  262. package/dist/{login-2XcHd4wn.cjs → login-M1IF2MdC.cjs} +2 -2
  263. package/dist/{login-2XcHd4wn.cjs.map → login-M1IF2MdC.cjs.map} +1 -1
  264. package/dist/{logout-DC5TMJ5_.cjs → logout-BCSfFgPz.cjs} +2 -2
  265. package/dist/{logout-DC5TMJ5_.cjs.map → logout-BCSfFgPz.cjs.map} +1 -1
  266. package/dist/{logout-BDbWrGBm.mjs → logout-DFzQCQKe.mjs} +2 -2
  267. package/dist/{logout-BDbWrGBm.mjs.map → logout-DFzQCQKe.mjs.map} +1 -1
  268. package/dist/management-C1p-Hm2Z.cjs +19 -0
  269. package/dist/{management-BGYcZB4c.cjs.map → management-C1p-Hm2Z.cjs.map} +1 -1
  270. package/dist/{management-DDACMgbU.mjs → management-h4yE09a6.mjs} +5 -5
  271. package/dist/{management-DDACMgbU.mjs.map → management-h4yE09a6.mjs.map} +1 -1
  272. package/dist/object-CZDLoc9L.cjs +20 -0
  273. package/dist/{object-DVqidsEc.cjs.map → object-CZDLoc9L.cjs.map} +1 -1
  274. package/dist/object-CqMsEkh9.mjs +20 -0
  275. package/dist/{object-qdBdEghr.mjs.map → object-CqMsEkh9.mjs.map} +1 -1
  276. package/dist/{org-CPhTRTks.mjs → org-Co-rjfr-.mjs} +2 -2
  277. package/dist/{org-CPhTRTks.mjs.map → org-Co-rjfr-.mjs.map} +1 -1
  278. package/dist/{org-C4cVovOM.cjs → org-Drj3VqIm.cjs} +2 -2
  279. package/dist/{org-C4cVovOM.cjs.map → org-Drj3VqIm.cjs.map} +1 -1
  280. package/dist/{org-context-Bewx2NEW.cjs → org-context-DKFnPH_o.cjs} +2 -2
  281. package/dist/{org-context-Bewx2NEW.cjs.map → org-context-DKFnPH_o.cjs.map} +1 -1
  282. package/dist/{org-context-D0dwWC2M.mjs → org-context-Df5McOiK.mjs} +2 -2
  283. package/dist/{org-context-D0dwWC2M.mjs.map → org-context-Df5McOiK.mjs.map} +1 -1
  284. package/dist/project-C7qWFjMV.mjs +20 -0
  285. package/dist/{project-CaXD3QBs.mjs.map → project-C7qWFjMV.mjs.map} +1 -1
  286. package/dist/project-Dm7nr5NV.cjs +20 -0
  287. package/dist/{project-BX7zvWB1.cjs.map → project-Dm7nr5NV.cjs.map} +1 -1
  288. package/dist/project-user-D9h_QBc0.mjs +20 -0
  289. package/dist/{project-user-Cp7i6orv.mjs.map → project-user-D9h_QBc0.mjs.map} +1 -1
  290. package/dist/project-user-wLFnHFwB.cjs +20 -0
  291. package/dist/{project-user-Dm0qR-sh.cjs.map → project-user-wLFnHFwB.cjs.map} +1 -1
  292. package/dist/prompt-C-XNDSNE.cjs +42 -0
  293. package/dist/prompt-C-XNDSNE.cjs.map +1 -0
  294. package/dist/prompt-Dr2Rkxun.mjs +25 -0
  295. package/dist/prompt-Dr2Rkxun.mjs.map +1 -0
  296. package/dist/{push-0u6PDz4E.cjs → push-BggkrD0g.cjs} +31 -12
  297. package/dist/push-BggkrD0g.cjs.map +1 -0
  298. package/dist/{push-D7co0keA.mjs → push-xWnD9oov.mjs} +30 -11
  299. package/dist/push-xWnD9oov.mjs.map +1 -0
  300. package/dist/{run-codegen-Ceeosw5x.cjs → run-codegen-B-90rvjk.cjs} +4 -4
  301. package/dist/run-codegen-B-90rvjk.cjs.map +1 -0
  302. package/dist/{run-codegen-DgaFaIQ1.mjs → run-codegen-CrO08jJT.mjs} +4 -4
  303. package/dist/run-codegen-CrO08jJT.mjs.map +1 -0
  304. package/dist/{run-with-context-CVhmzAFZ.mjs → run-with-context-B4DyI8Wo.mjs} +6 -26
  305. package/dist/run-with-context-B4DyI8Wo.mjs.map +1 -0
  306. package/dist/{run-with-context-DJNnEigg.cjs → run-with-context-D8pSrqD_.cjs} +7 -39
  307. package/dist/run-with-context-D8pSrqD_.cjs.map +1 -0
  308. package/dist/schema-CUVTXrHk.cjs +20 -0
  309. package/dist/{schema-B3iRqvYK.cjs.map → schema-CUVTXrHk.cjs.map} +1 -1
  310. package/dist/schema-DlUWHV_t.mjs +20 -0
  311. package/dist/{schema-exG250MU.mjs.map → schema-DlUWHV_t.mjs.map} +1 -1
  312. package/dist/{status-Dq_NJE71.cjs → status-CqPJTxeK.cjs} +2 -2
  313. package/dist/{status-Dq_NJE71.cjs.map → status-CqPJTxeK.cjs.map} +1 -1
  314. package/dist/{status-fWqXzV0P.mjs → status-D7nOW3R3.mjs} +2 -2
  315. package/dist/{status-fWqXzV0P.mjs.map → status-D7nOW3R3.mjs.map} +1 -1
  316. package/dist/{token-store--9GYVL7N.cjs → token-store-BgWGhqq0.cjs} +3 -3
  317. package/dist/{token-store--9GYVL7N.cjs.map → token-store-BgWGhqq0.cjs.map} +1 -1
  318. package/dist/{token-store-reCGF86F.mjs → token-store-C2r7cFA-.mjs} +2 -2
  319. package/dist/{token-store-reCGF86F.mjs.map → token-store-C2r7cFA-.mjs.map} +1 -1
  320. package/dist/{update-B4lv4dAz.mjs → update-8-sHFvNB.mjs} +2 -2
  321. package/dist/{update-B4lv4dAz.mjs.map → update-8-sHFvNB.mjs.map} +1 -1
  322. package/dist/{update-Dyo4vuZs.mjs → update-B5hKKw0K.mjs} +3 -3
  323. package/dist/{update-Dyo4vuZs.mjs.map → update-B5hKKw0K.mjs.map} +1 -1
  324. package/dist/{update-Do9HHWzs.cjs → update-BVaqURWE.cjs} +2 -2
  325. package/dist/{update-Do9HHWzs.cjs.map → update-BVaqURWE.cjs.map} +1 -1
  326. package/dist/{update-DRnN1kiu.cjs → update-BlUwNhLA.cjs} +2 -2
  327. package/dist/{update-DRnN1kiu.cjs.map → update-BlUwNhLA.cjs.map} +1 -1
  328. package/dist/{update-Cx_2GkQj.cjs → update-BqhLwuP7.cjs} +2 -2
  329. package/dist/{update-Cx_2GkQj.cjs.map → update-BqhLwuP7.cjs.map} +1 -1
  330. package/dist/{update-mEmULIau.mjs → update-DaYjh5VN.mjs} +2 -2
  331. package/dist/{update-mEmULIau.mjs.map → update-DaYjh5VN.mjs.map} +1 -1
  332. package/dist/{update-CJgEmSWJ.cjs → update-DcTzR54Z.cjs} +3 -3
  333. package/dist/{update-CJgEmSWJ.cjs.map → update-DcTzR54Z.cjs.map} +1 -1
  334. package/dist/{update-CIH6sSVk.cjs → update-Dne7g_0s.cjs} +2 -2
  335. package/dist/{update-CIH6sSVk.cjs.map → update-Dne7g_0s.cjs.map} +1 -1
  336. package/dist/{update-CQ4n4Xuf.mjs → update-Dy1BOnTB.mjs} +2 -2
  337. package/dist/{update-CQ4n4Xuf.mjs.map → update-Dy1BOnTB.mjs.map} +1 -1
  338. package/dist/{update-rzij1b_o.mjs → update-slz_X0mG.mjs} +2 -2
  339. package/dist/{update-rzij1b_o.mjs.map → update-slz_X0mG.mjs.map} +1 -1
  340. package/dist/{upload-DGgJ1TQk.mjs → upload-CDtzV9Wx.mjs} +3 -3
  341. package/dist/{upload-DGgJ1TQk.mjs.map → upload-CDtzV9Wx.mjs.map} +1 -1
  342. package/dist/{upload-C43ZXxyb.cjs → upload-DIln1QDA.cjs} +3 -3
  343. package/dist/{upload-C43ZXxyb.cjs.map → upload-DIln1QDA.cjs.map} +1 -1
  344. package/dist/{validate-BpxZ8LTl.cjs → validate-BH8jqdqq.cjs} +2 -2
  345. package/dist/{validate-BpxZ8LTl.cjs.map → validate-BH8jqdqq.cjs.map} +1 -1
  346. package/dist/{validate-Ca0CRo16.mjs → validate-COS4bfr0.mjs} +2 -2
  347. package/dist/{validate-Ca0CRo16.mjs.map → validate-COS4bfr0.mjs.map} +1 -1
  348. package/dist/webhook-BT3cHrq5.mjs +20 -0
  349. package/dist/{webhook-CpZ1-Ho5.mjs.map → webhook-BT3cHrq5.mjs.map} +1 -1
  350. package/dist/webhook-CQeuAqec.cjs +20 -0
  351. package/dist/{webhook-CbL4QaR5.cjs.map → webhook-CQeuAqec.cjs.map} +1 -1
  352. package/package.json +10 -9
  353. package/dist/auth-CNbONZuf.cjs +0 -18
  354. package/dist/cms-BJnovGYT.mjs.map +0 -1
  355. package/dist/cms-Cnx-lDGu.cjs.map +0 -1
  356. package/dist/config-loader-BEgS869e.mjs.map +0 -1
  357. package/dist/config-loader-D8x32gEU.cjs.map +0 -1
  358. package/dist/consumer-OF6Z_eTP.cjs.map +0 -1
  359. package/dist/consumer-l-8wUK8E.cjs +0 -18
  360. package/dist/consumer-pU2HyiyA.mjs.map +0 -1
  361. package/dist/content-BOb6NC8M.mjs +0 -20
  362. package/dist/content-DMjSwor1.cjs +0 -20
  363. package/dist/management-BGYcZB4c.cjs +0 -19
  364. package/dist/object-DVqidsEc.cjs +0 -20
  365. package/dist/object-qdBdEghr.mjs +0 -20
  366. package/dist/project-BX7zvWB1.cjs +0 -20
  367. package/dist/project-CaXD3QBs.mjs +0 -20
  368. package/dist/project-user-Cp7i6orv.mjs +0 -20
  369. package/dist/project-user-Dm0qR-sh.cjs +0 -20
  370. package/dist/push-0u6PDz4E.cjs.map +0 -1
  371. package/dist/push-D7co0keA.mjs.map +0 -1
  372. package/dist/run-codegen-Ceeosw5x.cjs.map +0 -1
  373. package/dist/run-codegen-DgaFaIQ1.mjs.map +0 -1
  374. package/dist/run-with-context-CVhmzAFZ.mjs.map +0 -1
  375. package/dist/run-with-context-DJNnEigg.cjs.map +0 -1
  376. package/dist/schema-B3iRqvYK.cjs +0 -20
  377. package/dist/schema-exG250MU.mjs +0 -20
  378. package/dist/webhook-CbL4QaR5.cjs +0 -20
  379. package/dist/webhook-CpZ1-Ho5.mjs +0 -20
@@ -0,0 +1 @@
1
+ {"version":3,"file":"push-xWnD9oov.mjs","names":["partial"],"sources":["../src/cli/schema/change-events.ts","../src/cli/commands/schema/push.ts"],"sourcesContent":["import type { components } from \"@orizm/internal-shared/api-clients/dev-v2\";\nimport { renderTable, type RowColor, type TableRow } from \"../ui/table.js\";\n\ntype ChangeEvents = components[\"schemas\"][\"OrizmConfigChangeEvents\"];\ntype TableChangeEvent = ChangeEvents[\"tableChangeEvents\"][number];\ntype BucketChangeEvent = ChangeEvents[\"bucketChangeEvents\"][number];\ntype AuthorityChangeEvent = ChangeEvents[\"authorityChangeEvents\"][number];\ntype SemanticSearchChangeEvent =\n ChangeEvents[\"semanticSearchChangeEvents\"][number];\n\nexport function hasChanges(events: ChangeEvents): boolean {\n return (\n events.tableChangeEvents.length > 0 ||\n events.bucketChangeEvents.length > 0 ||\n events.authorityChangeEvents.length > 0 ||\n semanticSearchChangeEventsOf(events).length > 0\n );\n}\n\n// semanticSearchChangeEvents はこのフィールドを返さない旧サーバーに対しても落ちないよう、\n// 欠けていれば空として扱う(openapi-fetch は応答を実行時検証しない)\nfunction semanticSearchChangeEventsOf(\n events: ChangeEvents,\n): SemanticSearchChangeEvent[] {\n const partial: Partial<ChangeEvents> = events;\n return partial.semanticSearchChangeEvents ?? [];\n}\n\nexport function renderChangeEvents(\n events: ChangeEvents,\n color: boolean,\n): string {\n const sections = [\n ...renderTableSections(events.tableChangeEvents, color),\n ...renderBucketSection(events.bucketChangeEvents, color),\n ...renderAuthoritySection(events.authorityChangeEvents, color),\n ...renderSemanticSearchSection(semanticSearchChangeEventsOf(events), color),\n ];\n return sections.join(\"\\n\\n\");\n}\n\nfunction renderTableSections(\n tableChangeEvents: TableChangeEvent[],\n color: boolean,\n): string[] {\n // 1 テーブルにつき 1 ブロックを出すため、対象テーブル名でまとめる。\n const eventsByTable = new Map<string, TableChangeEvent[]>();\n for (const event of tableChangeEvents) {\n const grouped = eventsByTable.get(event.tableDef.name) ?? [];\n grouped.push(event);\n eventsByTable.set(event.tableDef.name, grouped);\n }\n\n return [...eventsByTable.entries()].map(([tableName, events]) => {\n const rows = events.map(tableEventRow);\n return `⚫︎Table: ${tableName}\\n${renderTable(\n [\"Type\", \"Name\", \"Event\", \"Detail\"],\n rows,\n color,\n )}`;\n });\n}\n\nfunction renderBucketSection(\n bucketChangeEvents: BucketChangeEvent[],\n color: boolean,\n): string[] {\n if (bucketChangeEvents.length === 0) return [];\n const rows = bucketChangeEvents.map(bucketEventRow);\n return [\n `⚫︎Buckets\\n${renderTable(\n [\"Type\", \"Name\", \"Event\", \"Detail\"],\n rows,\n color,\n )}`,\n ];\n}\n\nfunction renderAuthoritySection(\n authorityChangeEvents: AuthorityChangeEvent[],\n color: boolean,\n): string[] {\n if (authorityChangeEvents.length === 0) return [];\n const rows = authorityChangeEvents.map((event): TableRow => ({\n cells: [\"authority\", event.event, JSON.stringify(event.authorityDef)],\n color: \"green\",\n }));\n return [\n `⚫︎Authorities\\n${renderTable([\"Type\", \"Event\", \"Detail\"], rows, color)}`,\n ];\n}\n\n// 有効化は追加のみ、無効化はベクトルインデックス(埋め込み済みデータ)を消すので赤。\nfunction renderSemanticSearchSection(\n semanticSearchChangeEvents: SemanticSearchChangeEvent[],\n color: boolean,\n): string[] {\n if (semanticSearchChangeEvents.length === 0) return [];\n const rows = semanticSearchChangeEvents.map((event): TableRow => ({\n cells: [\"semanticSearch\", event.event],\n color: event.event === \"semanticSearch:enable\" ? \"green\" : \"red\",\n }));\n return [`⚫︎Semantic search\\n${renderTable([\"Type\", \"Event\"], rows, color)}`];\n}\n\n// create / update / enable は安全な変更なので緑、delete / disable はデータを失う危険な操作なので赤。\nfunction tableEventRow(event: TableChangeEvent): TableRow {\n switch (event.event) {\n case \"table:create\":\n case \"table:update\":\n return row(\"table\", event.tableDef.name, event.event, \"\", \"green\");\n case \"table:delete\":\n return row(\"table\", event.tableDef.name, event.event, \"\", \"red\");\n case \"column:create\":\n case \"column:update\":\n return row(\n \"column\",\n event.columnDef.name,\n event.event,\n JSON.stringify(event.columnDef),\n \"green\",\n );\n case \"column:delete\":\n return row(\n \"column\",\n event.columnDef.name,\n event.event,\n JSON.stringify(event.columnDef),\n \"red\",\n );\n case \"index:create\":\n case \"index:update\":\n return row(\n \"index\",\n event.indexDef.columns.join(\", \"),\n event.event,\n JSON.stringify(event.indexDef),\n \"green\",\n );\n case \"index:delete\":\n return row(\n \"index\",\n event.indexDef.columns.join(\", \"),\n event.event,\n JSON.stringify(event.indexDef),\n \"red\",\n );\n case \"module:create\":\n case \"module:update\":\n return row(\n \"module\",\n event.columnDef.name,\n event.event,\n JSON.stringify(event.columnDef),\n \"green\",\n );\n case \"module:delete\":\n return row(\n \"module\",\n event.columnDef.name,\n event.event,\n JSON.stringify(event.columnDef),\n \"red\",\n );\n case \"search:enable\":\n case \"search:update\":\n case \"history:enable\":\n case \"draft:enable\":\n case \"formSubmissions:create\":\n case \"formSubmissions:update\":\n return row(\"table\", event.tableDef.name, event.event, \"\", \"green\");\n case \"search:disable\":\n case \"history:disable\":\n case \"draft:disable\":\n case \"formSubmissions:delete\":\n return row(\"table\", event.tableDef.name, event.event, \"\", \"red\");\n }\n}\n\nfunction bucketEventRow(event: BucketChangeEvent): TableRow {\n const color: RowColor = event.event === \"bucket:delete\" ? \"red\" : \"green\";\n return row(\n \"bucket\",\n event.bucketDef.name,\n event.event,\n JSON.stringify(event.bucketDef),\n color,\n );\n}\n\nfunction row(\n type: string,\n name: string,\n event: string,\n detail: string,\n color: RowColor,\n): TableRow {\n return { cells: [type, name, event, detail], color };\n}\n","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, configFileArg, DEFAULT_CONFIG_FILE } from \"../shared.js\";\nimport { runWithContext, type CommandContext } from \"../run-with-context.js\";\nimport { configLoadFailure } from \"../config-errors.js\";\nimport { apiErrorFailure } from \"../api-errors.js\";\nimport { loadConfig } from \"../../config-loader.js\";\nimport { toResult } from \"../../api/errors.js\";\nimport { getOutputState, notice } from \"../../ui/output.js\";\nimport { confirm } from \"../../ui/prompt.js\";\nimport { hasChanges, renderChangeEvents } from \"../../schema/change-events.js\";\n\nexport type PushOptions = {\n configFile: string;\n dryRun: boolean;\n yes: boolean;\n force: boolean;\n};\n\nexport async function pushHandler(\n ctx: CommandContext,\n options: PushOptions,\n): Promise<Result.Result<CommandOutput | undefined, CommandFailure>> {\n const loaded = await loadConfig(options.configFile);\n if (Result.isFailure(loaded)) return configLoadFailure(loaded.error);\n\n const dryRun = await ctx.client.POST(\n \"/projects/{projectName}/definitions/dry-run\",\n {\n params: { path: { projectName: ctx.projectName } },\n body: { definition: loaded.value },\n },\n );\n const events = toResult(dryRun);\n if (Result.isFailure(events)) return apiErrorFailure(events.error);\n\n const changed = hasChanges(events.value);\n // --dry-run は --force の影響を受けない(apply しないので「差分なし」の表示のまま)\n if (options.dryRun) {\n return Result.succeed({\n json: events.value,\n text: () =>\n changed\n ? renderChangeEvents(events.value, getOutputState().color)\n : \"No changes to apply.\",\n });\n }\n\n if (!changed && !options.force) {\n return Result.succeed({\n json: events.value,\n text: () => \"No changes to apply.\",\n });\n }\n\n // --force は差分の有無に関わらず定義を送る(サーバー側の突き合わせ処理を同じ定義で再実行させるため)\n notice(\n changed\n ? renderChangeEvents(events.value, getOutputState().color)\n : \"No changes detected. Applying anyway (--force).\",\n );\n\n if (!options.yes) {\n if (process.stdin.isTTY !== true) {\n return Result.fail({\n message:\n \"Refusing to apply without confirmation in a non-interactive shell. Re-run with --yes.\",\n });\n }\n const approved = await confirm(\"Apply these changes?\");\n if (!approved) {\n return Result.succeed({\n json: { applied: false },\n text: () => \"Canceled.\",\n });\n }\n }\n\n const applyResponse = await ctx.client.POST(\n \"/projects/{projectName}/definitions\",\n {\n params: { path: { projectName: ctx.projectName } },\n body: { definition: loaded.value },\n },\n );\n const applied = toResult(applyResponse);\n if (Result.isFailure(applied)) return apiErrorFailure(applied.error);\n\n return Result.succeed({\n json: applied.value,\n text: () => \"Schema applied.\",\n });\n}\n\nconst pushArgs = {\n ...contextArgs,\n \"config-file\": configFileArg,\n \"dry-run\": {\n type: \"boolean\",\n description: \"Show change events without applying them\",\n default: false,\n },\n yes: {\n type: \"boolean\",\n description: \"Apply without the confirmation prompt\",\n default: false,\n },\n force: {\n type: \"boolean\",\n description:\n \"Apply even when no changes are detected (re-runs server-side reconciliation, e.g. semantic search indexes)\",\n default: false,\n },\n} satisfies ArgsDef;\n\nexport default defineCommand({\n meta: {\n name: \"push\",\n description: \"Build orizm.config.ts and apply the schema to the project\",\n },\n args: pushArgs,\n run: ({ args }) =>\n runWithContext(args, (ctx) =>\n pushHandler(ctx, {\n configFile: args[\"config-file\"] ?? DEFAULT_CONFIG_FILE,\n dryRun: args[\"dry-run\"] === true,\n yes: args.yes === true,\n force: args.force === true,\n }),\n ),\n});\n"],"mappings":"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"}
@@ -1,12 +1,12 @@
1
1
  const require_cli_main = require('./cli/main.cjs');
2
- const require_run_with_context = require('./run-with-context-DJNnEigg.cjs');
3
- const require_config_loader = require('./config-loader-D8x32gEU.cjs');
2
+ const require_run_with_context = require('./run-with-context-D8pSrqD_.cjs');
3
+ const require_config_loader = require('./config-loader-CZfANHBf.cjs');
4
4
  let _praha_byethrow = require("@praha/byethrow");
5
5
  let valibot = require("valibot");
6
6
  valibot = require_cli_main.__toESM(valibot, 1);
7
- let node_fs_promises = require("node:fs/promises");
8
7
  let node_path = require("node:path");
9
8
  node_path = require_cli_main.__toESM(node_path, 1);
9
+ let node_fs_promises = require("node:fs/promises");
10
10
  let prettier_standalone = require("prettier/standalone");
11
11
  prettier_standalone = require_cli_main.__toESM(prettier_standalone, 1);
12
12
  let prettier_plugins_estree_js = require("prettier/plugins/estree.js");
@@ -269,4 +269,4 @@ Object.defineProperty(exports, 'toCodeTypeName', {
269
269
  return toCodeTypeName;
270
270
  }
271
271
  });
272
- //# sourceMappingURL=run-codegen-Ceeosw5x.cjs.map
272
+ //# sourceMappingURL=run-codegen-B-90rvjk.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-codegen-B-90rvjk.cjs","names":["prettier","prettierPluginEstree","prettierPluginTypeScript","path","toResult","Result","v","OrizmConfigDef","runWithContext","Result","loadConfig","configLoadFailure","formatValibotIssues","getOutputState","apiErrorFailure"],"sources":["../src/cli/codegen/format.ts","../src/cli/codegen/render.ts","../src/cli/codegen/write.ts","../src/cli/codegen/pull.ts","../src/cli/commands/codegen/run-codegen.ts"],"sourcesContent":["import * as prettier from \"prettier/standalone\";\nimport prettierPluginEstree from \"prettier/plugins/estree.js\";\nimport prettierPluginTypeScript from \"prettier/plugins/typescript.js\";\n\nexport function formatTsWithPrettier(code: string): Promise<string> {\n return prettier.format(code, {\n parser: \"typescript\",\n plugins: [prettierPluginEstree, prettierPluginTypeScript],\n });\n}\n","export type RenderColumn = {\n name: string;\n type: string;\n required?: boolean;\n readOnly?: boolean;\n moduleName?: string;\n tableName?: string;\n includeName?: string;\n};\n\nexport type RenderIndex = {\n columns: string[];\n unique?: boolean;\n nullsNotDistinct?: boolean;\n};\n\nexport const AUTOGEN_HEADER =\n \"// This file was automatically generated and should not be edited.\";\n\nexport const UTILITIES = `// Utilities\ntype _ModuleRef<T> = T & _ModuleDescriptor;\ntype _ModuleDescriptor = {\n isModule: true;\n};\ntype _ArrayModuleRef<T> = T & _ArrayModuleDescriptor;\ntype _ArrayModuleDescriptor = {\n isModuleArray: true;\n};`;\n\nexport function toCodeTypeName(str: string): string {\n const capitalized = str.charAt(0).toUpperCase() + str.slice(1);\n return capitalized.replace(/_([a-z])/g, (g) => g[1].toUpperCase());\n}\n\nexport function typeName(column: RenderColumn, moduleSuffix = \"\"): string {\n switch (column.type) {\n case \"reference\":\n return \"string\";\n case \"module\":\n return toCodeTypeName(column.moduleName ?? \"\") + moduleSuffix;\n case \"module-array\":\n return toCodeTypeName(column.moduleName ?? \"\") + moduleSuffix + \"[]\";\n case \"json\":\n return \"unknown\";\n case \"storage\":\n return \"StorageItemType\";\n default:\n return column.type;\n }\n}\n\nexport function nullableSuffix(column: RenderColumn): string {\n return !column.required && column.type !== \"module-array\" ? \" | null\" : \"\";\n}\n\nexport function filterRefColumns(columns: RenderColumn[]): RenderColumn[] {\n return columns.filter(\n (c) =>\n (c.type === \"reference\" &&\n c.tableName !== undefined &&\n c.includeName !== undefined &&\n c.includeName !== \"\") ||\n (c.type === \"module\" && c.moduleName !== undefined) ||\n (c.type === \"module-array\" && c.moduleName !== undefined),\n );\n}\n\nexport function getIncludeName(column: RenderColumn): string {\n return column.type === \"reference\"\n ? column.includeName || column.name\n : column.name;\n}\n\nexport function getIncludeType(column: RenderColumn): string {\n if (column.type === \"reference\" && column.tableName) {\n return toCodeTypeName(column.tableName) + \"__Descriptor\";\n }\n if (column.type === \"module\" && column.moduleName) {\n return `_ModuleRef<${toCodeTypeName(column.moduleName)}__Descriptor>`;\n }\n if (column.type === \"module-array\" && column.moduleName) {\n return `_ArrayModuleRef<${toCodeTypeName(column.moduleName)}__Descriptor>`;\n }\n return \"\";\n}\n\nexport function renderColumnField(\n col: RenderColumn,\n options?: { optional?: boolean; suffix?: string },\n): string {\n const optional = options?.optional === true ? \"?\" : \"\";\n const suffix = options?.suffix ?? \"\";\n return `${col.name}${optional}: ${typeName(col, suffix)}${nullableSuffix(col)};`;\n}\n\nexport function renderTypeBlock(name: string, fields: string[]): string {\n return `export type ${name} = {\\n${fields.join(\"\\n\")}\\n};`;\n}\n\nexport function renderRefsFieldLines(columns: RenderColumn[]): string[] {\n const refCols = filterRefColumns(columns);\n if (refCols.length === 0) return [\"refs: object;\"];\n return [\n \"refs: {\",\n ...refCols.map((c) => `${getIncludeName(c)}: ${getIncludeType(c)};`),\n \"}\",\n ];\n}\n\nexport function renderUniqueFieldLines(table: {\n columns: RenderColumn[];\n indexes?: RenderIndex[];\n}): string[] {\n const uniqueIndexes = (table.indexes ?? []).filter((i) => i.unique);\n if (uniqueIndexes.length === 0) return [\"unique: [];\"];\n const entries = uniqueIndexes.map((index) => {\n const cols = index.columns.map((colName) => {\n const col = table.columns.find((c) => c.name === colName);\n if (!col) throw new Error(`column ${colName} not found`);\n const nullable = !col.required && index.nullsNotDistinct ? \" | null\" : \"\";\n return `${col.name}:${typeName(col)}${nullable},`;\n });\n return `{ ${cols.join(\"\")} },`;\n });\n return [\"unique: [\", ...entries, \"]\"];\n}\n\nexport function renderModuleRowTypeBlock(mod: {\n name: string;\n columns: RenderColumn[];\n}): string {\n return renderTypeBlock(toCodeTypeName(mod.name), [\n \"id: string;\",\n ...mod.columns.map((col) => renderColumnField(col)),\n ]);\n}\n\nexport function renderModuleDescriptorBlock(mod: {\n name: string;\n columns: RenderColumn[];\n}): string {\n const name = toCodeTypeName(mod.name);\n return renderTypeBlock(`${name}__Descriptor`, [\n `row: ${name};`,\n ...renderRefsFieldLines(mod.columns),\n \"unique: [];\",\n ]);\n}\n\nexport function renderSection(title: string, blocks: string[]): string {\n if (blocks.length === 0) return \"\";\n return `// ${title}\\n${blocks.join(\"\\n\\n\")}`;\n}\n\nexport function renderWebhookTypesSection(tables: { name: string }[]): string {\n const lines: string[] = [\n \"// Webhook types\",\n 'export type WebhookEvent = \"content.create\" | \"content.update\" | \"content.delete\";',\n \"\",\n \"type WebhookPayloadBase = {\",\n \" event: WebhookEvent;\",\n \" timestamp: string;\",\n \" project: string;\",\n \"};\",\n \"\",\n ];\n if (tables.length > 0) {\n const unionMembers = tables\n .map((t) => {\n const name = toCodeTypeName(t.name);\n return `| {\\n table: \"${t.name}\";\\n content: ${name};\\n old?: ${name};\\n}`;\n })\n .join(\"\\n\");\n lines.push(\n `export type WebhookPayload = WebhookPayloadBase & (\\n${unionMembers}\\n);`,\n );\n } else {\n lines.push(\"export type WebhookPayload = WebhookPayloadBase;\");\n }\n return lines.join(\"\\n\");\n}\n","import { mkdir, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport function resolveOutputFile(output: string): string {\n return output.endsWith(\".ts\") ? output : path.join(output, \"index.ts\");\n}\n\nexport async function writeGeneratedFile(\n output: string,\n content: string,\n): Promise<string> {\n const target = resolveOutputFile(output);\n await mkdir(path.dirname(target), { recursive: true });\n await writeFile(target, content, \"utf-8\");\n return target;\n}\n","import * as v from \"valibot\";\nimport { Result } from \"@praha/byethrow\";\nimport { OrizmConfigDef } from \"@orizm/common/config-validator\";\nimport { toResult, type ApiError } from \"../api/errors.js\";\nimport type { CommandContext } from \"../commands/run-with-context.js\";\nimport { CommonOrizmConfig } from \"../types.js\";\n\nexport type PullError =\n | ApiError\n | { type: \"definition_schema_violation\"; issues: v.BaseIssue<unknown>[] };\n\n// サーバーの applied definition を取得し、valibot 検証を通して codegen 入力\n// (CommonOrizmConfig)に揃える。raw(JSON) を正本にすることで型キャストを避ける。\n// ここは保存済み定義の「読み取り」なので、authoring 用の OrizmConfigInputDef ではなく\n// OrizmConfigDef を使う — 予約名(例: `_semantic`)を後から追加しても、その名前を\n// 予約前から使っているプロジェクトの pull / codegen を壊さないため。\nexport async function pullCurrentDefinition(\n ctx: CommandContext,\n): Promise<Result.Result<CommonOrizmConfig, PullError>> {\n const definition = toResult(\n await ctx.client.GET(\"/projects/{projectName}/definitions/current\", {\n params: { path: { projectName: ctx.projectName } },\n }),\n );\n if (Result.isFailure(definition)) return definition;\n\n const parsed = v.safeParse(\n OrizmConfigDef,\n safeJsonParse(definition.value.raw),\n );\n if (!parsed.success) {\n return Result.fail({\n type: \"definition_schema_violation\",\n issues: parsed.issues,\n });\n }\n return Result.succeed(parsed.output);\n}\n\nfunction safeJsonParse(raw: string): unknown {\n try {\n return JSON.parse(raw);\n } catch {\n return undefined;\n }\n}\n","import { Result } from \"@praha/byethrow\";\nimport { type CommandFailure, type CommandOutput } from \"../define-command.js\";\nimport { configLoadFailure } from \"../config-errors.js\";\nimport { apiErrorFailure } from \"../api-errors.js\";\nimport { runWithContext } from \"../run-with-context.js\";\nimport { loadConfig } from \"../../config-loader.js\";\nimport { writeGeneratedFile } from \"../../codegen/write.js\";\nimport { pullCurrentDefinition, type PullError } from \"../../codegen/pull.js\";\nimport { getOutputState } from \"../../ui/output.js\";\nimport { formatValibotIssues } from \"../../ui/error.js\";\nimport type { CommonOrizmConfig } from \"../../types.js\";\n\ntype CodegenParams = {\n args: Record<string, unknown>;\n pull: boolean;\n configFile: string;\n output: string;\n label: string;\n render: (config: CommonOrizmConfig) => Promise<string>;\n};\n\n// cms / consumer 共通の codegen 実行。source がローカル config(既定)かサーバー applied\n// definition(--pull)かだけが違い、生成・書き出しは同じ。\nexport async function runCodegen(\n params: CodegenParams,\n): Promise<Result.Result<CommandOutput | undefined, CommandFailure>> {\n if (params.pull) {\n return runWithContext(params.args, async (ctx) => {\n const pulled = await pullCurrentDefinition(ctx);\n if (Result.isFailure(pulled)) return pullFailure(pulled.error);\n return generate(pulled.value, params);\n });\n }\n\n const loaded = await loadConfig(params.configFile);\n if (Result.isFailure(loaded)) return configLoadFailure(loaded.error);\n return generate(loaded.value, params);\n}\n\nasync function generate(\n config: CommonOrizmConfig,\n params: CodegenParams,\n): Promise<Result.Result<CommandOutput, CommandFailure>> {\n const content = await params.render(config);\n const target = await writeGeneratedFile(params.output, content);\n return Result.succeed({\n json: { output: target },\n text: () => `Generated ${params.label} types to ${target}`,\n });\n}\n\nfunction pullFailure(error: PullError): Result.Result<never, CommandFailure> {\n if (error.type === \"definition_schema_violation\") {\n return Result.fail({\n message: `The applied definition is invalid (${error.issues.length} problem(s)).\\n${formatValibotIssues(\n error.issues,\n getOutputState().color,\n )}`,\n });\n }\n return apiErrorFailure(error);\n}\n"],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  import { n as formatValibotIssues, r as getOutputState } from "./cli/main.mjs";
2
- import { a as apiErrorFailure, n as runWithContext, u as toResult } from "./run-with-context-CVhmzAFZ.mjs";
3
- import { n as configLoadFailure, t as loadConfig } from "./config-loader-BEgS869e.mjs";
2
+ import { a as apiErrorFailure, c as toResult, n as runWithContext } from "./run-with-context-B4DyI8Wo.mjs";
3
+ import { n as configLoadFailure, t as loadConfig } from "./config-loader-CtbZOGjc.mjs";
4
4
  import { Result } from "@praha/byethrow";
5
5
  import * as v from "valibot";
6
- import { mkdir, writeFile } from "node:fs/promises";
7
6
  import path from "node:path";
7
+ import { mkdir, writeFile } from "node:fs/promises";
8
8
  import * as prettier from "prettier/standalone";
9
9
  import prettierPluginEstree from "prettier/plugins/estree.js";
10
10
  import prettierPluginTypeScript from "prettier/plugins/typescript.js";
@@ -187,4 +187,4 @@ function pullFailure(error) {
187
187
 
188
188
  //#endregion
189
189
  export { renderModuleDescriptorBlock as a, renderSection as c, renderWebhookTypesSection as d, toCodeTypeName as f, renderColumnField as i, renderTypeBlock as l, AUTOGEN_HEADER as n, renderModuleRowTypeBlock as o, formatTsWithPrettier as p, UTILITIES as r, renderRefsFieldLines as s, runCodegen as t, renderUniqueFieldLines as u };
190
- //# sourceMappingURL=run-codegen-DgaFaIQ1.mjs.map
190
+ //# sourceMappingURL=run-codegen-CrO08jJT.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-codegen-CrO08jJT.mjs","names":[],"sources":["../src/cli/codegen/format.ts","../src/cli/codegen/render.ts","../src/cli/codegen/write.ts","../src/cli/codegen/pull.ts","../src/cli/commands/codegen/run-codegen.ts"],"sourcesContent":["import * as prettier from \"prettier/standalone\";\nimport prettierPluginEstree from \"prettier/plugins/estree.js\";\nimport prettierPluginTypeScript from \"prettier/plugins/typescript.js\";\n\nexport function formatTsWithPrettier(code: string): Promise<string> {\n return prettier.format(code, {\n parser: \"typescript\",\n plugins: [prettierPluginEstree, prettierPluginTypeScript],\n });\n}\n","export type RenderColumn = {\n name: string;\n type: string;\n required?: boolean;\n readOnly?: boolean;\n moduleName?: string;\n tableName?: string;\n includeName?: string;\n};\n\nexport type RenderIndex = {\n columns: string[];\n unique?: boolean;\n nullsNotDistinct?: boolean;\n};\n\nexport const AUTOGEN_HEADER =\n \"// This file was automatically generated and should not be edited.\";\n\nexport const UTILITIES = `// Utilities\ntype _ModuleRef<T> = T & _ModuleDescriptor;\ntype _ModuleDescriptor = {\n isModule: true;\n};\ntype _ArrayModuleRef<T> = T & _ArrayModuleDescriptor;\ntype _ArrayModuleDescriptor = {\n isModuleArray: true;\n};`;\n\nexport function toCodeTypeName(str: string): string {\n const capitalized = str.charAt(0).toUpperCase() + str.slice(1);\n return capitalized.replace(/_([a-z])/g, (g) => g[1].toUpperCase());\n}\n\nexport function typeName(column: RenderColumn, moduleSuffix = \"\"): string {\n switch (column.type) {\n case \"reference\":\n return \"string\";\n case \"module\":\n return toCodeTypeName(column.moduleName ?? \"\") + moduleSuffix;\n case \"module-array\":\n return toCodeTypeName(column.moduleName ?? \"\") + moduleSuffix + \"[]\";\n case \"json\":\n return \"unknown\";\n case \"storage\":\n return \"StorageItemType\";\n default:\n return column.type;\n }\n}\n\nexport function nullableSuffix(column: RenderColumn): string {\n return !column.required && column.type !== \"module-array\" ? \" | null\" : \"\";\n}\n\nexport function filterRefColumns(columns: RenderColumn[]): RenderColumn[] {\n return columns.filter(\n (c) =>\n (c.type === \"reference\" &&\n c.tableName !== undefined &&\n c.includeName !== undefined &&\n c.includeName !== \"\") ||\n (c.type === \"module\" && c.moduleName !== undefined) ||\n (c.type === \"module-array\" && c.moduleName !== undefined),\n );\n}\n\nexport function getIncludeName(column: RenderColumn): string {\n return column.type === \"reference\"\n ? column.includeName || column.name\n : column.name;\n}\n\nexport function getIncludeType(column: RenderColumn): string {\n if (column.type === \"reference\" && column.tableName) {\n return toCodeTypeName(column.tableName) + \"__Descriptor\";\n }\n if (column.type === \"module\" && column.moduleName) {\n return `_ModuleRef<${toCodeTypeName(column.moduleName)}__Descriptor>`;\n }\n if (column.type === \"module-array\" && column.moduleName) {\n return `_ArrayModuleRef<${toCodeTypeName(column.moduleName)}__Descriptor>`;\n }\n return \"\";\n}\n\nexport function renderColumnField(\n col: RenderColumn,\n options?: { optional?: boolean; suffix?: string },\n): string {\n const optional = options?.optional === true ? \"?\" : \"\";\n const suffix = options?.suffix ?? \"\";\n return `${col.name}${optional}: ${typeName(col, suffix)}${nullableSuffix(col)};`;\n}\n\nexport function renderTypeBlock(name: string, fields: string[]): string {\n return `export type ${name} = {\\n${fields.join(\"\\n\")}\\n};`;\n}\n\nexport function renderRefsFieldLines(columns: RenderColumn[]): string[] {\n const refCols = filterRefColumns(columns);\n if (refCols.length === 0) return [\"refs: object;\"];\n return [\n \"refs: {\",\n ...refCols.map((c) => `${getIncludeName(c)}: ${getIncludeType(c)};`),\n \"}\",\n ];\n}\n\nexport function renderUniqueFieldLines(table: {\n columns: RenderColumn[];\n indexes?: RenderIndex[];\n}): string[] {\n const uniqueIndexes = (table.indexes ?? []).filter((i) => i.unique);\n if (uniqueIndexes.length === 0) return [\"unique: [];\"];\n const entries = uniqueIndexes.map((index) => {\n const cols = index.columns.map((colName) => {\n const col = table.columns.find((c) => c.name === colName);\n if (!col) throw new Error(`column ${colName} not found`);\n const nullable = !col.required && index.nullsNotDistinct ? \" | null\" : \"\";\n return `${col.name}:${typeName(col)}${nullable},`;\n });\n return `{ ${cols.join(\"\")} },`;\n });\n return [\"unique: [\", ...entries, \"]\"];\n}\n\nexport function renderModuleRowTypeBlock(mod: {\n name: string;\n columns: RenderColumn[];\n}): string {\n return renderTypeBlock(toCodeTypeName(mod.name), [\n \"id: string;\",\n ...mod.columns.map((col) => renderColumnField(col)),\n ]);\n}\n\nexport function renderModuleDescriptorBlock(mod: {\n name: string;\n columns: RenderColumn[];\n}): string {\n const name = toCodeTypeName(mod.name);\n return renderTypeBlock(`${name}__Descriptor`, [\n `row: ${name};`,\n ...renderRefsFieldLines(mod.columns),\n \"unique: [];\",\n ]);\n}\n\nexport function renderSection(title: string, blocks: string[]): string {\n if (blocks.length === 0) return \"\";\n return `// ${title}\\n${blocks.join(\"\\n\\n\")}`;\n}\n\nexport function renderWebhookTypesSection(tables: { name: string }[]): string {\n const lines: string[] = [\n \"// Webhook types\",\n 'export type WebhookEvent = \"content.create\" | \"content.update\" | \"content.delete\";',\n \"\",\n \"type WebhookPayloadBase = {\",\n \" event: WebhookEvent;\",\n \" timestamp: string;\",\n \" project: string;\",\n \"};\",\n \"\",\n ];\n if (tables.length > 0) {\n const unionMembers = tables\n .map((t) => {\n const name = toCodeTypeName(t.name);\n return `| {\\n table: \"${t.name}\";\\n content: ${name};\\n old?: ${name};\\n}`;\n })\n .join(\"\\n\");\n lines.push(\n `export type WebhookPayload = WebhookPayloadBase & (\\n${unionMembers}\\n);`,\n );\n } else {\n lines.push(\"export type WebhookPayload = WebhookPayloadBase;\");\n }\n return lines.join(\"\\n\");\n}\n","import { mkdir, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nexport function resolveOutputFile(output: string): string {\n return output.endsWith(\".ts\") ? output : path.join(output, \"index.ts\");\n}\n\nexport async function writeGeneratedFile(\n output: string,\n content: string,\n): Promise<string> {\n const target = resolveOutputFile(output);\n await mkdir(path.dirname(target), { recursive: true });\n await writeFile(target, content, \"utf-8\");\n return target;\n}\n","import * as v from \"valibot\";\nimport { Result } from \"@praha/byethrow\";\nimport { OrizmConfigDef } from \"@orizm/common/config-validator\";\nimport { toResult, type ApiError } from \"../api/errors.js\";\nimport type { CommandContext } from \"../commands/run-with-context.js\";\nimport { CommonOrizmConfig } from \"../types.js\";\n\nexport type PullError =\n | ApiError\n | { type: \"definition_schema_violation\"; issues: v.BaseIssue<unknown>[] };\n\n// サーバーの applied definition を取得し、valibot 検証を通して codegen 入力\n// (CommonOrizmConfig)に揃える。raw(JSON) を正本にすることで型キャストを避ける。\n// ここは保存済み定義の「読み取り」なので、authoring 用の OrizmConfigInputDef ではなく\n// OrizmConfigDef を使う — 予約名(例: `_semantic`)を後から追加しても、その名前を\n// 予約前から使っているプロジェクトの pull / codegen を壊さないため。\nexport async function pullCurrentDefinition(\n ctx: CommandContext,\n): Promise<Result.Result<CommonOrizmConfig, PullError>> {\n const definition = toResult(\n await ctx.client.GET(\"/projects/{projectName}/definitions/current\", {\n params: { path: { projectName: ctx.projectName } },\n }),\n );\n if (Result.isFailure(definition)) return definition;\n\n const parsed = v.safeParse(\n OrizmConfigDef,\n safeJsonParse(definition.value.raw),\n );\n if (!parsed.success) {\n return Result.fail({\n type: \"definition_schema_violation\",\n issues: parsed.issues,\n });\n }\n return Result.succeed(parsed.output);\n}\n\nfunction safeJsonParse(raw: string): unknown {\n try {\n return JSON.parse(raw);\n } catch {\n return undefined;\n }\n}\n","import { Result } from \"@praha/byethrow\";\nimport { type CommandFailure, type CommandOutput } from \"../define-command.js\";\nimport { configLoadFailure } from \"../config-errors.js\";\nimport { apiErrorFailure } from \"../api-errors.js\";\nimport { runWithContext } from \"../run-with-context.js\";\nimport { loadConfig } from \"../../config-loader.js\";\nimport { writeGeneratedFile } from \"../../codegen/write.js\";\nimport { pullCurrentDefinition, type PullError } from \"../../codegen/pull.js\";\nimport { getOutputState } from \"../../ui/output.js\";\nimport { formatValibotIssues } from \"../../ui/error.js\";\nimport type { CommonOrizmConfig } from \"../../types.js\";\n\ntype CodegenParams = {\n args: Record<string, unknown>;\n pull: boolean;\n configFile: string;\n output: string;\n label: string;\n render: (config: CommonOrizmConfig) => Promise<string>;\n};\n\n// cms / consumer 共通の codegen 実行。source がローカル config(既定)かサーバー applied\n// definition(--pull)かだけが違い、生成・書き出しは同じ。\nexport async function runCodegen(\n params: CodegenParams,\n): Promise<Result.Result<CommandOutput | undefined, CommandFailure>> {\n if (params.pull) {\n return runWithContext(params.args, async (ctx) => {\n const pulled = await pullCurrentDefinition(ctx);\n if (Result.isFailure(pulled)) return pullFailure(pulled.error);\n return generate(pulled.value, params);\n });\n }\n\n const loaded = await loadConfig(params.configFile);\n if (Result.isFailure(loaded)) return configLoadFailure(loaded.error);\n return generate(loaded.value, params);\n}\n\nasync function generate(\n config: CommonOrizmConfig,\n params: CodegenParams,\n): Promise<Result.Result<CommandOutput, CommandFailure>> {\n const content = await params.render(config);\n const target = await writeGeneratedFile(params.output, content);\n return Result.succeed({\n json: { output: target },\n text: () => `Generated ${params.label} types to ${target}`,\n });\n}\n\nfunction pullFailure(error: PullError): Result.Result<never, CommandFailure> {\n if (error.type === \"definition_schema_violation\") {\n return Result.fail({\n message: `The applied definition is invalid (${error.issues.length} problem(s)).\\n${formatValibotIssues(\n error.issues,\n getOutputState().color,\n )}`,\n });\n }\n return apiErrorFailure(error);\n}\n"],"mappings":"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"}
@@ -1,10 +1,11 @@
1
- import { a as notice, i as logger } from "./cli/main.mjs";
2
- import { n as resolveEnv, t as FileTokenStore } from "./token-store-reCGF86F.mjs";
1
+ import { a as notice } from "./cli/main.mjs";
2
+ import { r as select, t as confirm } from "./prompt-Dr2Rkxun.mjs";
3
+ import { n as resolveEnv, t as FileTokenStore } from "./token-store-C2r7cFA-.mjs";
3
4
  import { r as refreshTokens } from "./oauth-client-QHuDa4fW.mjs";
4
5
  import { Result } from "@praha/byethrow";
5
6
  import * as v from "valibot";
6
- import { access, mkdir, readFile, writeFile } from "node:fs/promises";
7
7
  import path from "node:path";
8
+ import { access, mkdir, readFile, writeFile } from "node:fs/promises";
8
9
 
9
10
  //#region src/cli/auth/refresh.ts
10
11
  const REFRESH_THRESHOLD_MS = 60 * 1e3;
@@ -700,27 +701,6 @@ async function appendGitignoreEntry(dir) {
700
701
  await writeFile(file, `${existing == null || existing === "" || existing.endsWith("\n") ? existing ?? "" : existing + "\n"}${ENTRY}\n`, "utf-8");
701
702
  }
702
703
 
703
- //#endregion
704
- //#region src/cli/ui/prompt.ts
705
- async function confirm(message, initial = false) {
706
- return await logger.prompt(message, {
707
- type: "confirm",
708
- initial
709
- }) === true;
710
- }
711
- async function promptText(message) {
712
- const answer = await logger.prompt(message, { type: "text" });
713
- return typeof answer === "string" ? answer : void 0;
714
- }
715
- async function select(message, options) {
716
- const answer = await logger.prompt(message, {
717
- type: "select",
718
- options,
719
- cancel: "null"
720
- });
721
- return typeof answer === "string" ? answer : void 0;
722
- }
723
-
724
704
  //#endregion
725
705
  //#region src/cli/commands/api-errors.ts
726
706
  function apiErrorFailure(error) {
@@ -872,5 +852,5 @@ function projectContextFailure(error) {
872
852
  }
873
853
 
874
854
  //#endregion
875
- export { apiErrorFailure as a, fetchOrganizations as c, resolveOrganizationName as d, runLinkFlow as i, resolveOrganizationId as l, runWithContext as n, confirm as o, defaultLinkPrompts as r, promptText as s, runWithAuth as t, toResult as u };
876
- //# sourceMappingURL=run-with-context-CVhmzAFZ.mjs.map
855
+ export { apiErrorFailure as a, toResult as c, runLinkFlow as i, resolveOrganizationName as l, runWithContext as n, fetchOrganizations as o, defaultLinkPrompts as r, resolveOrganizationId as s, runWithAuth as t };
856
+ //# sourceMappingURL=run-with-context-B4DyI8Wo.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-with-context-B4DyI8Wo.mjs","names":["#store","#inflight","#toAccessToken","#refreshOnce","#doRefresh"],"sources":["../src/cli/auth/refresh.ts","../src/cli/context/project.ts","../src/cli/credentials/resolve.ts","../../internal-shared/dist/assert-valid-url-origin-XeiLzH_m.mjs","../../internal-shared/dist/api-clients/dev-v2-api-client.mjs","../src/cli/api/client.ts","../src/cli/api/errors.ts","../src/cli/api/organizations.ts","../src/cli/context/gitignore.ts","../src/cli/commands/api-errors.ts","../src/cli/commands/link-flow.ts","../src/cli/commands/run-with-context.ts"],"sourcesContent":["import { Result } from \"@praha/byethrow\";\nimport { refreshTokens } from \"./oauth-client.js\";\nimport type { TokenEntry, TokenStore } from \"./token-store.js\";\n\nconst REFRESH_THRESHOLD_MS = 60 * 1000;\n\nexport type RefreshError =\n | { type: \"no_token\" }\n | { type: \"refresh_failed\"; reason: string };\n\nexport class TokenRefresher {\n readonly #store: TokenStore;\n // 同一プロセス内で同じ issuer のリフレッシュを二重に走らせると rotation reuse 検出に当たるため、\n // 進行中の Promise を共有して 1 度だけ走らせる。\n readonly #inflight = new Map<\n string,\n Promise<Result.Result<TokenEntry, RefreshError>>\n >();\n\n constructor(store: TokenStore) {\n this.#store = store;\n }\n\n async getValidAccessToken(\n issuerUrl: string,\n ): Promise<Result.Result<string, RefreshError>> {\n const entry = await this.#store.get(issuerUrl);\n if (entry === undefined) return Result.fail({ type: \"no_token\" });\n if (!isExpiringSoon(entry.expiresAt)) {\n return Result.succeed(entry.accessToken);\n }\n return this.#toAccessToken(this.#refreshOnce(issuerUrl));\n }\n\n // 401 受信後に明示的に 1 度だけ呼ぶリアクティブなリフレッシュ。\n async forceRefresh(\n issuerUrl: string,\n ): Promise<Result.Result<string, RefreshError>> {\n return this.#toAccessToken(this.#refreshOnce(issuerUrl));\n }\n\n async #toAccessToken(\n pending: Promise<Result.Result<TokenEntry, RefreshError>>,\n ): Promise<Result.Result<string, RefreshError>> {\n const result = await pending;\n if (Result.isFailure(result)) return result;\n return Result.succeed(result.value.accessToken);\n }\n\n #refreshOnce(\n issuerUrl: string,\n ): Promise<Result.Result<TokenEntry, RefreshError>> {\n const existing = this.#inflight.get(issuerUrl);\n if (existing !== undefined) return existing;\n\n const pending = this.#doRefresh(issuerUrl).finally(() =>\n this.#inflight.delete(issuerUrl),\n );\n this.#inflight.set(issuerUrl, pending);\n return pending;\n }\n\n async #doRefresh(\n issuerUrl: string,\n ): Promise<Result.Result<TokenEntry, RefreshError>> {\n const entry = await this.#store.get(issuerUrl);\n if (entry === undefined) return Result.fail({ type: \"no_token\" });\n\n const refreshed = await refreshTokens({\n issuerUrl,\n refreshToken: entry.refreshToken,\n });\n if (Result.isFailure(refreshed)) {\n // revoked / expired。再ログインを促すためエントリを消す。\n await this.#store.remove(issuerUrl);\n return Result.fail({\n type: \"refresh_failed\",\n reason: refreshed.error.reason,\n });\n }\n\n const updated: TokenEntry = {\n ...entry,\n accessToken: refreshed.value.accessToken,\n refreshToken: refreshed.value.refreshToken,\n idToken: refreshed.value.idToken,\n scope: refreshed.value.scope,\n expiresAt: refreshed.value.expiresAt,\n };\n // 古い refresh_token を二度使うと rotation reuse 検出で失効するため、\n // 永続化を完了させてから呼び出し側へ返す。\n await this.#store.set(issuerUrl, updated);\n return Result.succeed(updated);\n }\n}\n\nfunction isExpiringSoon(expiresAt: string): boolean {\n const remaining = Date.parse(expiresAt) - Date.now();\n return remaining <= REFRESH_THRESHOLD_MS;\n}\n","import { access, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport * as v from \"valibot\";\nimport { Result } from \"@praha/byethrow\";\n\nexport type ProjectContext = {\n projectName: string;\n organizationName?: string;\n};\n\nexport type ProjectContextError =\n | { type: \"project_json_invalid\"; path: string }\n | { type: \"no_project_context\" };\n\nexport type OrganizationContextError = { type: \"no_organization_context\" };\n\nconst ProjectFileSchema = v.object({\n projectName: v.pipe(v.string(), v.nonEmpty()),\n organizationName: v.optional(v.pipe(v.string(), v.nonEmpty())),\n});\n\ntype FoundProjectFile = { path: string; context: ProjectContext };\n\n// リポジトリのサブディレクトリから実行されてもルート付近に置いた設定を拾えるよう、\n// 親方向にたどって最寄りの .orizm/project.json を探す。\nexport async function readNearestProjectFile(\n cwd: string = process.cwd(),\n): Promise<Result.Result<FoundProjectFile | undefined, ProjectContextError>> {\n let dir = path.resolve(cwd);\n for (;;) {\n const file = path.join(dir, \".orizm\", \"project.json\");\n const raw = await readFile(file, \"utf-8\").catch(\n (error: NodeJS.ErrnoException) => {\n if (error.code === \"ENOENT\") return undefined;\n throw error;\n },\n );\n\n if (raw !== undefined) {\n const parsed = v.safeParse(ProjectFileSchema, safeJsonParse(raw));\n if (!parsed.success) {\n return Result.fail({ type: \"project_json_invalid\", path: file });\n }\n return Result.succeed({ path: file, context: parsed.output });\n }\n\n const parent = path.dirname(dir);\n if (parent === dir) return Result.succeed(undefined);\n dir = parent;\n }\n}\n\n// より明示的に与えられた指定ほど優先する(フラグ → 環境変数 → ファイル)。\nexport async function resolveProjectName(params: {\n flag?: string;\n env?: string;\n cwd?: string;\n}): Promise<Result.Result<string, ProjectContextError>> {\n if (params.flag != null && params.flag !== \"\") {\n return Result.succeed(params.flag);\n }\n if (params.env != null && params.env !== \"\") {\n return Result.succeed(params.env);\n }\n\n const found = await readNearestProjectFile(params.cwd);\n if (Result.isFailure(found)) return found;\n if (found.value === undefined) {\n return Result.fail({ type: \"no_project_context\" });\n }\n return Result.succeed(found.value.context.projectName);\n}\n\n// org が必要なコマンド(project list / create)は flag → .orizm/project.json の順で解決する。\n// ADR-004 の通り ORIZM_ORGANIZATION env は持たない。\nexport async function resolveOrganizationName(params: {\n flag?: string;\n cwd?: string;\n}): Promise<\n Result.Result<string, ProjectContextError | OrganizationContextError>\n> {\n if (params.flag != null && params.flag !== \"\") {\n return Result.succeed(params.flag);\n }\n\n const found = await readNearestProjectFile(params.cwd);\n if (Result.isFailure(found)) return found;\n\n const organizationName = found.value?.context.organizationName;\n if (organizationName == null || organizationName === \"\") {\n return Result.fail({ type: \"no_organization_context\" });\n }\n return Result.succeed(organizationName);\n}\n\n// link が対象とするディレクトリ。CWD から親方向に .orizm/project.json を持つ最寄りを探し、\n// 見つかればそのディレクトリを、無ければ CWD を返す。read (resolveProjectName) と同じ探索のため、\n// link が書くファイルと後続コマンドが読むファイルが必ず一致し、重複した .orizm を作らない。\nexport async function resolveLinkDirectory(\n cwd: string = process.cwd(),\n): Promise<string> {\n let dir = path.resolve(cwd);\n for (;;) {\n const exists = await access(path.join(dir, \".orizm\", \"project.json\")).then(\n () => true,\n () => false,\n );\n if (exists) return dir;\n\n const parent = path.dirname(dir);\n if (parent === dir) return path.resolve(cwd);\n dir = parent;\n }\n}\n\n// 指定ディレクトリ直下の .orizm/project.json を読む。無い / 壊れているなら undefined。\nexport async function readProjectFileAt(\n dir: string,\n): Promise<ProjectContext | undefined> {\n const file = path.join(path.resolve(dir), \".orizm\", \"project.json\");\n const raw = await readFile(file, \"utf-8\").catch(\n (error: NodeJS.ErrnoException) => {\n if (error.code === \"ENOENT\") return undefined;\n throw error;\n },\n );\n if (raw === undefined) return undefined;\n\n const parsed = v.safeParse(ProjectFileSchema, safeJsonParse(raw));\n return parsed.success ? parsed.output : undefined;\n}\n\n// link で選んだ結果を 指定ディレクトリ直下の .orizm/project.json に書き出す。戻り値は書き込んだパス。\nexport async function writeProjectFile(\n dir: string,\n context: ProjectContext,\n): Promise<string> {\n const orizmDir = path.join(path.resolve(dir), \".orizm\");\n await mkdir(orizmDir, { recursive: true });\n const file = path.join(orizmDir, \"project.json\");\n await writeFile(file, JSON.stringify(context, null, 2) + \"\\n\", \"utf-8\");\n return file;\n}\n\nfunction safeJsonParse(raw: string): unknown {\n try {\n return JSON.parse(raw);\n } catch {\n return undefined;\n }\n}\n","import { Result } from \"@praha/byethrow\";\nimport type { TokenStore } from \"../auth/token-store.js\";\n\nexport type Credentials =\n | { type: \"bearer\"; issuerUrl: string }\n | { type: \"api-key\"; apiKey: string };\n\nexport type ResolveCredentialsError = { type: \"no_credentials\" };\n\n// ログイン済みなら OAuth2 トークンを優先し、無ければ ORIZM_API_KEY を使う。\n// トークンがあるのに API キーへフォールバックすると、ログインした identity と\n// 別アカウントのキーが混ざって原因の分かりにくいアクセス失敗を招くため、フォールバックしない。\nexport async function resolveCredentials(params: {\n store: TokenStore;\n issuerUrl: string;\n apiKey: string | undefined;\n}): Promise<Result.Result<Credentials, ResolveCredentialsError>> {\n const entry = await params.store.get(params.issuerUrl);\n if (entry !== undefined) {\n return Result.succeed({ type: \"bearer\", issuerUrl: params.issuerUrl });\n }\n if (params.apiKey !== undefined) {\n return Result.succeed({ type: \"api-key\", apiKey: params.apiKey });\n }\n return Result.fail({ type: \"no_credentials\" });\n}\n","//#region ../../node_modules/.pnpm/openapi-fetch@0.17.0/node_modules/openapi-fetch/dist/index.mjs\nconst PATH_PARAM_RE = /\\{[^{}]+\\}/g;\nconst supportsRequestInitExt = () => {\n\treturn typeof process === \"object\" && Number.parseInt(process?.versions?.node?.substring(0, 2)) >= 18 && process.versions.undici;\n};\nfunction randomID() {\n\treturn Math.random().toString(36).slice(2, 11);\n}\nfunction createClient(clientOptions) {\n\tlet { baseUrl = \"\", Request: CustomRequest = globalThis.Request, fetch: baseFetch = globalThis.fetch, querySerializer: globalQuerySerializer, bodySerializer: globalBodySerializer, pathSerializer: globalPathSerializer, headers: baseHeaders, requestInitExt = void 0, ...baseOptions } = { ...clientOptions };\n\trequestInitExt = supportsRequestInitExt() ? requestInitExt : void 0;\n\tbaseUrl = removeTrailingSlash(baseUrl);\n\tconst globalMiddlewares = [];\n\tasync function coreFetch(schemaPath, fetchOptions) {\n\t\tconst { baseUrl: localBaseUrl, fetch = baseFetch, Request = CustomRequest, headers, params = {}, parseAs = \"json\", querySerializer: requestQuerySerializer, bodySerializer = globalBodySerializer ?? defaultBodySerializer, pathSerializer: requestPathSerializer, body, middleware: requestMiddlewares = [], ...init } = fetchOptions || {};\n\t\tlet finalBaseUrl = baseUrl;\n\t\tif (localBaseUrl) finalBaseUrl = removeTrailingSlash(localBaseUrl) ?? baseUrl;\n\t\tlet querySerializer = typeof globalQuerySerializer === \"function\" ? globalQuerySerializer : createQuerySerializer(globalQuerySerializer);\n\t\tif (requestQuerySerializer) querySerializer = typeof requestQuerySerializer === \"function\" ? requestQuerySerializer : createQuerySerializer({\n\t\t\t...typeof globalQuerySerializer === \"object\" ? globalQuerySerializer : {},\n\t\t\t...requestQuerySerializer\n\t\t});\n\t\tconst pathSerializer = requestPathSerializer || globalPathSerializer || defaultPathSerializer;\n\t\tconst serializedBody = body === void 0 ? void 0 : bodySerializer(body, mergeHeaders(baseHeaders, headers, params.header));\n\t\tconst finalHeaders = mergeHeaders(serializedBody === void 0 || serializedBody instanceof FormData ? {} : { \"Content-Type\": \"application/json\" }, baseHeaders, headers, params.header);\n\t\tconst finalMiddlewares = [...globalMiddlewares, ...requestMiddlewares];\n\t\tconst requestInit = {\n\t\t\tredirect: \"follow\",\n\t\t\t...baseOptions,\n\t\t\t...init,\n\t\t\tbody: serializedBody,\n\t\t\theaders: finalHeaders\n\t\t};\n\t\tlet id;\n\t\tlet options;\n\t\tlet request = new Request(createFinalURL(schemaPath, {\n\t\t\tbaseUrl: finalBaseUrl,\n\t\t\tparams,\n\t\t\tquerySerializer,\n\t\t\tpathSerializer\n\t\t}), requestInit);\n\t\tlet response;\n\t\tfor (const key in init) if (!(key in request)) request[key] = init[key];\n\t\tif (finalMiddlewares.length) {\n\t\t\tid = randomID();\n\t\t\toptions = Object.freeze({\n\t\t\t\tbaseUrl: finalBaseUrl,\n\t\t\t\tfetch,\n\t\t\t\tparseAs,\n\t\t\t\tquerySerializer,\n\t\t\t\tbodySerializer,\n\t\t\t\tpathSerializer\n\t\t\t});\n\t\t\tfor (const m of finalMiddlewares) if (m && typeof m === \"object\" && typeof m.onRequest === \"function\") {\n\t\t\t\tconst result = await m.onRequest({\n\t\t\t\t\trequest,\n\t\t\t\t\tschemaPath,\n\t\t\t\t\tparams,\n\t\t\t\t\toptions,\n\t\t\t\t\tid\n\t\t\t\t});\n\t\t\t\tif (result) if (result instanceof Request) request = result;\n\t\t\t\telse if (result instanceof Response) {\n\t\t\t\t\tresponse = result;\n\t\t\t\t\tbreak;\n\t\t\t\t} else throw new Error(\"onRequest: must return new Request() or Response() when modifying the request\");\n\t\t\t}\n\t\t}\n\t\tif (!response) {\n\t\t\ttry {\n\t\t\t\tresponse = await fetch(request, requestInitExt);\n\t\t\t} catch (error2) {\n\t\t\t\tlet errorAfterMiddleware = error2;\n\t\t\t\tif (finalMiddlewares.length) for (let i = finalMiddlewares.length - 1; i >= 0; i--) {\n\t\t\t\t\tconst m = finalMiddlewares[i];\n\t\t\t\t\tif (m && typeof m === \"object\" && typeof m.onError === \"function\") {\n\t\t\t\t\t\tconst result = await m.onError({\n\t\t\t\t\t\t\trequest,\n\t\t\t\t\t\t\terror: errorAfterMiddleware,\n\t\t\t\t\t\t\tschemaPath,\n\t\t\t\t\t\t\tparams,\n\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t\tid\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (result) {\n\t\t\t\t\t\t\tif (result instanceof Response) {\n\t\t\t\t\t\t\t\terrorAfterMiddleware = void 0;\n\t\t\t\t\t\t\t\tresponse = result;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (result instanceof Error) {\n\t\t\t\t\t\t\t\terrorAfterMiddleware = result;\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthrow new Error(\"onError: must return new Response() or instance of Error\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (errorAfterMiddleware) throw errorAfterMiddleware;\n\t\t\t}\n\t\t\tif (finalMiddlewares.length) for (let i = finalMiddlewares.length - 1; i >= 0; i--) {\n\t\t\t\tconst m = finalMiddlewares[i];\n\t\t\t\tif (m && typeof m === \"object\" && typeof m.onResponse === \"function\") {\n\t\t\t\t\tconst result = await m.onResponse({\n\t\t\t\t\t\trequest,\n\t\t\t\t\t\tresponse,\n\t\t\t\t\t\tschemaPath,\n\t\t\t\t\t\tparams,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t\tid\n\t\t\t\t\t});\n\t\t\t\t\tif (result) {\n\t\t\t\t\t\tif (!(result instanceof Response)) throw new Error(\"onResponse: must return new Response() when modifying the response\");\n\t\t\t\t\t\tresponse = result;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst contentLength = response.headers.get(\"Content-Length\");\n\t\tif (response.status === 204 || request.method === \"HEAD\" || contentLength === \"0\" && !response.headers.get(\"Transfer-Encoding\")?.includes(\"chunked\")) return response.ok ? {\n\t\t\tdata: void 0,\n\t\t\tresponse\n\t\t} : {\n\t\t\terror: void 0,\n\t\t\tresponse\n\t\t};\n\t\tif (response.ok) {\n\t\t\tconst getResponseData = async () => {\n\t\t\t\tif (parseAs === \"stream\") return response.body;\n\t\t\t\tif (parseAs === \"json\" && !contentLength) {\n\t\t\t\t\tconst raw = await response.text();\n\t\t\t\t\treturn raw ? JSON.parse(raw) : void 0;\n\t\t\t\t}\n\t\t\t\treturn await response[parseAs]();\n\t\t\t};\n\t\t\treturn {\n\t\t\t\tdata: await getResponseData(),\n\t\t\t\tresponse\n\t\t\t};\n\t\t}\n\t\tlet error = await response.text();\n\t\ttry {\n\t\t\terror = JSON.parse(error);\n\t\t} catch {}\n\t\treturn {\n\t\t\terror,\n\t\t\tresponse\n\t\t};\n\t}\n\treturn {\n\t\trequest(method, url, init) {\n\t\t\treturn coreFetch(url, {\n\t\t\t\t...init,\n\t\t\t\tmethod: method.toUpperCase()\n\t\t\t});\n\t\t},\n\t\t/** Call a GET endpoint */\n\t\tGET(url, init) {\n\t\t\treturn coreFetch(url, {\n\t\t\t\t...init,\n\t\t\t\tmethod: \"GET\"\n\t\t\t});\n\t\t},\n\t\t/** Call a PUT endpoint */\n\t\tPUT(url, init) {\n\t\t\treturn coreFetch(url, {\n\t\t\t\t...init,\n\t\t\t\tmethod: \"PUT\"\n\t\t\t});\n\t\t},\n\t\t/** Call a POST endpoint */\n\t\tPOST(url, init) {\n\t\t\treturn coreFetch(url, {\n\t\t\t\t...init,\n\t\t\t\tmethod: \"POST\"\n\t\t\t});\n\t\t},\n\t\t/** Call a DELETE endpoint */\n\t\tDELETE(url, init) {\n\t\t\treturn coreFetch(url, {\n\t\t\t\t...init,\n\t\t\t\tmethod: \"DELETE\"\n\t\t\t});\n\t\t},\n\t\t/** Call a OPTIONS endpoint */\n\t\tOPTIONS(url, init) {\n\t\t\treturn coreFetch(url, {\n\t\t\t\t...init,\n\t\t\t\tmethod: \"OPTIONS\"\n\t\t\t});\n\t\t},\n\t\t/** Call a HEAD endpoint */\n\t\tHEAD(url, init) {\n\t\t\treturn coreFetch(url, {\n\t\t\t\t...init,\n\t\t\t\tmethod: \"HEAD\"\n\t\t\t});\n\t\t},\n\t\t/** Call a PATCH endpoint */\n\t\tPATCH(url, init) {\n\t\t\treturn coreFetch(url, {\n\t\t\t\t...init,\n\t\t\t\tmethod: \"PATCH\"\n\t\t\t});\n\t\t},\n\t\t/** Call a TRACE endpoint */\n\t\tTRACE(url, init) {\n\t\t\treturn coreFetch(url, {\n\t\t\t\t...init,\n\t\t\t\tmethod: \"TRACE\"\n\t\t\t});\n\t\t},\n\t\t/** Register middleware */\n\t\tuse(...middleware) {\n\t\t\tfor (const m of middleware) {\n\t\t\t\tif (!m) continue;\n\t\t\t\tif (typeof m !== \"object\" || !(\"onRequest\" in m || \"onResponse\" in m || \"onError\" in m)) throw new Error(\"Middleware must be an object with one of `onRequest()`, `onResponse() or `onError()`\");\n\t\t\t\tglobalMiddlewares.push(m);\n\t\t\t}\n\t\t},\n\t\t/** Unregister middleware */\n\t\teject(...middleware) {\n\t\t\tfor (const m of middleware) {\n\t\t\t\tconst i = globalMiddlewares.indexOf(m);\n\t\t\t\tif (i !== -1) globalMiddlewares.splice(i, 1);\n\t\t\t}\n\t\t}\n\t};\n}\nvar PathCallForwarder = class {\n\tconstructor(client, url) {\n\t\tthis.client = client;\n\t\tthis.url = url;\n\t}\n\tGET = (init) => {\n\t\treturn this.client.GET(this.url, init);\n\t};\n\tPUT = (init) => {\n\t\treturn this.client.PUT(this.url, init);\n\t};\n\tPOST = (init) => {\n\t\treturn this.client.POST(this.url, init);\n\t};\n\tDELETE = (init) => {\n\t\treturn this.client.DELETE(this.url, init);\n\t};\n\tOPTIONS = (init) => {\n\t\treturn this.client.OPTIONS(this.url, init);\n\t};\n\tHEAD = (init) => {\n\t\treturn this.client.HEAD(this.url, init);\n\t};\n\tPATCH = (init) => {\n\t\treturn this.client.PATCH(this.url, init);\n\t};\n\tTRACE = (init) => {\n\t\treturn this.client.TRACE(this.url, init);\n\t};\n};\nvar PathClientProxyHandler = class {\n\tconstructor() {\n\t\tthis.client = null;\n\t}\n\tget(coreClient, url) {\n\t\tconst forwarder = new PathCallForwarder(coreClient, url);\n\t\tthis.client[url] = forwarder;\n\t\treturn forwarder;\n\t}\n};\nfunction wrapAsPathBasedClient(coreClient) {\n\tconst handler = new PathClientProxyHandler();\n\tconst proxy = new Proxy(coreClient, handler);\n\tfunction Client() {}\n\tClient.prototype = proxy;\n\tconst client = new Client();\n\thandler.client = client;\n\treturn client;\n}\nfunction createPathBasedClient(clientOptions) {\n\treturn wrapAsPathBasedClient(createClient(clientOptions));\n}\nfunction serializePrimitiveParam(name, value, options) {\n\tif (value === void 0 || value === null) return \"\";\n\tif (typeof value === \"object\") throw new Error(\"Deeply-nested arrays/objects aren’t supported. Provide your own `querySerializer()` to handle these.\");\n\treturn `${name}=${options?.allowReserved === true ? value : encodeURIComponent(value)}`;\n}\nfunction serializeObjectParam(name, value, options) {\n\tif (!value || typeof value !== \"object\") return \"\";\n\tconst values = [];\n\tconst joiner = {\n\t\tsimple: \",\",\n\t\tlabel: \".\",\n\t\tmatrix: \";\"\n\t}[options.style] || \"&\";\n\tif (options.style !== \"deepObject\" && options.explode === false) {\n\t\tfor (const k in value) values.push(k, options.allowReserved === true ? value[k] : encodeURIComponent(value[k]));\n\t\tconst final2 = values.join(\",\");\n\t\tswitch (options.style) {\n\t\t\tcase \"form\": return `${name}=${final2}`;\n\t\t\tcase \"label\": return `.${final2}`;\n\t\t\tcase \"matrix\": return `;${name}=${final2}`;\n\t\t\tdefault: return final2;\n\t\t}\n\t}\n\tfor (const k in value) {\n\t\tconst finalName = options.style === \"deepObject\" ? `${name}[${k}]` : k;\n\t\tvalues.push(serializePrimitiveParam(finalName, value[k], options));\n\t}\n\tconst final = values.join(joiner);\n\treturn options.style === \"label\" || options.style === \"matrix\" ? `${joiner}${final}` : final;\n}\nfunction serializeArrayParam(name, value, options) {\n\tif (!Array.isArray(value)) return \"\";\n\tif (options.explode === false) {\n\t\tconst joiner2 = {\n\t\t\tform: \",\",\n\t\t\tspaceDelimited: \"%20\",\n\t\t\tpipeDelimited: \"|\"\n\t\t}[options.style] || \",\";\n\t\tconst final = (options.allowReserved === true ? value : value.map((v) => encodeURIComponent(v))).join(joiner2);\n\t\tswitch (options.style) {\n\t\t\tcase \"simple\": return final;\n\t\t\tcase \"label\": return `.${final}`;\n\t\t\tcase \"matrix\": return `;${name}=${final}`;\n\t\t\tdefault: return `${name}=${final}`;\n\t\t}\n\t}\n\tconst joiner = {\n\t\tsimple: \",\",\n\t\tlabel: \".\",\n\t\tmatrix: \";\"\n\t}[options.style] || \"&\";\n\tconst values = [];\n\tfor (const v of value) if (options.style === \"simple\" || options.style === \"label\") values.push(options.allowReserved === true ? v : encodeURIComponent(v));\n\telse values.push(serializePrimitiveParam(name, v, options));\n\treturn options.style === \"label\" || options.style === \"matrix\" ? `${joiner}${values.join(joiner)}` : values.join(joiner);\n}\nfunction createQuerySerializer(options) {\n\treturn function querySerializer(queryParams) {\n\t\tconst search = [];\n\t\tif (queryParams && typeof queryParams === \"object\") for (const name in queryParams) {\n\t\t\tconst value = queryParams[name];\n\t\t\tif (value === void 0 || value === null) continue;\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tif (value.length === 0) continue;\n\t\t\t\tsearch.push(serializeArrayParam(name, value, {\n\t\t\t\t\tstyle: \"form\",\n\t\t\t\t\texplode: true,\n\t\t\t\t\t...options?.array,\n\t\t\t\t\tallowReserved: options?.allowReserved || false\n\t\t\t\t}));\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (typeof value === \"object\") {\n\t\t\t\tsearch.push(serializeObjectParam(name, value, {\n\t\t\t\t\tstyle: \"deepObject\",\n\t\t\t\t\texplode: true,\n\t\t\t\t\t...options?.object,\n\t\t\t\t\tallowReserved: options?.allowReserved || false\n\t\t\t\t}));\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tsearch.push(serializePrimitiveParam(name, value, options));\n\t\t}\n\t\treturn search.join(\"&\");\n\t};\n}\nfunction defaultPathSerializer(pathname, pathParams) {\n\tlet nextURL = pathname;\n\tfor (const match of pathname.match(PATH_PARAM_RE) ?? []) {\n\t\tlet name = match.substring(1, match.length - 1);\n\t\tlet explode = false;\n\t\tlet style = \"simple\";\n\t\tif (name.endsWith(\"*\")) {\n\t\t\texplode = true;\n\t\t\tname = name.substring(0, name.length - 1);\n\t\t}\n\t\tif (name.startsWith(\".\")) {\n\t\t\tstyle = \"label\";\n\t\t\tname = name.substring(1);\n\t\t} else if (name.startsWith(\";\")) {\n\t\t\tstyle = \"matrix\";\n\t\t\tname = name.substring(1);\n\t\t}\n\t\tif (!pathParams || pathParams[name] === void 0 || pathParams[name] === null) continue;\n\t\tconst value = pathParams[name];\n\t\tif (Array.isArray(value)) {\n\t\t\tnextURL = nextURL.replace(match, serializeArrayParam(name, value, {\n\t\t\t\tstyle,\n\t\t\t\texplode\n\t\t\t}));\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof value === \"object\") {\n\t\t\tnextURL = nextURL.replace(match, serializeObjectParam(name, value, {\n\t\t\t\tstyle,\n\t\t\t\texplode\n\t\t\t}));\n\t\t\tcontinue;\n\t\t}\n\t\tif (style === \"matrix\") {\n\t\t\tnextURL = nextURL.replace(match, `;${serializePrimitiveParam(name, value)}`);\n\t\t\tcontinue;\n\t\t}\n\t\tnextURL = nextURL.replace(match, style === \"label\" ? `.${encodeURIComponent(value)}` : encodeURIComponent(value));\n\t}\n\treturn nextURL;\n}\nfunction defaultBodySerializer(body, headers) {\n\tif (body instanceof FormData) return body;\n\tif (headers) {\n\t\tif ((headers.get instanceof Function ? headers.get(\"Content-Type\") ?? headers.get(\"content-type\") : headers[\"Content-Type\"] ?? headers[\"content-type\"]) === \"application/x-www-form-urlencoded\") return new URLSearchParams(body).toString();\n\t}\n\treturn JSON.stringify(body);\n}\nfunction createFinalURL(pathname, options) {\n\tlet finalURL = `${options.baseUrl}${pathname}`;\n\tif (options.params?.path) finalURL = options.pathSerializer(finalURL, options.params.path);\n\tlet search = options.querySerializer(options.params.query ?? {});\n\tif (search.startsWith(\"?\")) search = search.substring(1);\n\tif (search) finalURL += `?${search}`;\n\treturn finalURL;\n}\nfunction mergeHeaders(...allHeaders) {\n\tconst finalHeaders = new Headers();\n\tfor (const h of allHeaders) {\n\t\tif (!h || typeof h !== \"object\") continue;\n\t\tconst iterator = h instanceof Headers ? h.entries() : Object.entries(h);\n\t\tfor (const [k, v] of iterator) if (v === null) finalHeaders.delete(k);\n\t\telse if (Array.isArray(v)) for (const v2 of v) finalHeaders.append(k, v2);\n\t\telse if (v !== void 0) finalHeaders.set(k, v);\n\t}\n\treturn finalHeaders;\n}\nfunction removeTrailingSlash(url) {\n\tif (url.endsWith(\"/\")) return url.substring(0, url.length - 1);\n\treturn url;\n}\n\n//#endregion\n//#region src/api-clients/assert-valid-url-origin.ts\nfunction assertValidUrlOrigin(origin) {\n\tif (new URL(origin).origin !== origin) throw new Error(`${origin} is not a valid URL origin`);\n}\n\n//#endregion\nexport { createClient as n, createPathBasedClient as r, assertValidUrlOrigin as t };\n//# sourceMappingURL=assert-valid-url-origin-XeiLzH_m.mjs.map","import { n as createClient, r as createPathBasedClient, t as assertValidUrlOrigin } from \"../assert-valid-url-origin-XeiLzH_m.mjs\";\n\n//#region src/api-clients/dev-v2-api-client.ts\nfunction createDeveloperAPIv2Client({ serverOrigin = \"\", fetch, headers }) {\n\tif (serverOrigin) assertValidUrlOrigin(serverOrigin);\n\treturn createClient({\n\t\tbaseUrl: `${serverOrigin}/api/dev/v2`,\n\t\tfetch,\n\t\theaders\n\t});\n}\nfunction createPathBasedDeveloperAPIv2Client({ serverOrigin = \"\", fetch, headers }) {\n\tif (serverOrigin) assertValidUrlOrigin(serverOrigin);\n\treturn createPathBasedClient({\n\t\tbaseUrl: `${serverOrigin}/api/dev/v2`,\n\t\tfetch,\n\t\theaders\n\t});\n}\n\n//#endregion\nexport { createDeveloperAPIv2Client, createPathBasedDeveloperAPIv2Client };\n//# sourceMappingURL=dev-v2-api-client.mjs.map","import { Result } from \"@praha/byethrow\";\nimport { createDeveloperAPIv2Client } from \"@orizm/internal-shared/api-clients/dev-v2\";\nimport type { Credentials } from \"../credentials/resolve.js\";\nimport type { TokenRefresher } from \"../auth/refresh.js\";\n\nexport type DeveloperApiClient = ReturnType<typeof createDeveloperAPIv2Client>;\n\nexport function createAuthenticatedClient(params: {\n baseUrl: string;\n credentials: Credentials;\n refresher: TokenRefresher;\n}): DeveloperApiClient {\n const authFetch = buildAuthFetch(params.credentials, params.refresher);\n return createDeveloperAPIv2Client({\n serverOrigin: params.baseUrl,\n fetch: authFetch,\n });\n}\n\nfunction buildAuthFetch(\n credentials: Credentials,\n refresher: TokenRefresher,\n): typeof fetch {\n if (credentials.type === \"api-key\") {\n const { apiKey } = credentials;\n return async (input, init) => {\n const request = new Request(input, init);\n request.headers.set(\"x-api-key\", apiKey);\n return globalThis.fetch(request);\n };\n }\n\n const { issuerUrl } = credentials;\n return async (input, init) => {\n const token = await refresher.getValidAccessToken(issuerUrl);\n if (Result.isFailure(token)) return unauthorizedResponse();\n\n const request = new Request(input, init);\n // 401 を受けたら 1 度だけリフレッシュして再送するため、消費前に複製しておく。\n const retryRequest = request.clone();\n request.headers.set(\"Authorization\", `Bearer ${token.value}`);\n\n const first = await globalThis.fetch(request);\n if (first.status !== 401) return first;\n\n const refreshed = await refresher.forceRefresh(issuerUrl);\n if (Result.isFailure(refreshed)) return first;\n\n retryRequest.headers.set(\"Authorization\", `Bearer ${refreshed.value}`);\n return globalThis.fetch(retryRequest);\n };\n}\n\n// OAuth2 トークンが解決できないときは 401 として返し、呼び出し側で unauthorized として扱わせる。\nfunction unauthorizedResponse(): Response {\n return new Response(\n JSON.stringify({\n type: \"unauthorized\",\n title: \"Unauthorized\",\n detail: \"Authentication is required. Run `orizm auth login`.\",\n }),\n { status: 401, headers: { \"content-type\": \"application/json\" } },\n );\n}\n","import * as v from \"valibot\";\nimport { Result } from \"@praha/byethrow\";\n\nexport type ApiError =\n | {\n type: \"bad_request\";\n detail: string;\n fields: { field: string; message: string }[];\n }\n | { type: \"unauthorized\"; detail: string }\n | { type: \"forbidden\"; detail: string }\n | { type: \"not_found\"; detail: string }\n | { type: \"conflict\"; detail: string };\n\nconst ProblemSchema = v.object({\n type: v.string(),\n title: v.string(),\n detail: v.string(),\n fields: v.optional(\n v.array(\n v.union([\n v.string(),\n v.object({ field: v.string(), message: v.string() }),\n ]),\n ),\n ),\n});\n\n// フラットな形にして data から T をクリーンに推論させる(discriminated union だと T が\n// `Body | undefined` に広がってしまう)。成否は data の有無ではなく error の有無で判定する。\ntype ApiCallResult<T> = { data?: T; error?: unknown; response: Response };\n\n// openapi-fetch は空 body(Content-Length: 0)だと 4xx でも error: undefined を返すため、\n// error の有無だけでは成功と判定できず response.ok も併せて見る。\n// 204 No Content は T 自体が undefined なので { data: T } への narrowing は健全。\nfunction isSuccess<T>(\n result: ApiCallResult<T>,\n): result is { data: T; error?: undefined; response: Response } {\n return result.response.ok && result.error === undefined;\n}\n\n// 4xx は呼び出し側が型で扱える予測可能エラーなので Result.fail に落とし、\n// 回復しようのない 5xx / 想定外なレスポンスは throw して上位の共通ハンドラに委ねる。\nexport function toResult<T>(\n result: ApiCallResult<T>,\n): Result.Result<T, ApiError> {\n if (result.response.status >= 500) {\n throw new Error(`Server responded with ${result.response.status}`);\n }\n\n if (!isSuccess(result)) {\n return failFromProblem(result.error, result.response);\n }\n\n // 条件型推論(Promise 分岐)を避けるためリテラルで返す。204 No Content は value が undefined。\n return { type: \"Success\", value: result.data };\n}\n\nfunction failFromProblem(\n error: unknown,\n response: Response,\n): Result.Result<never, ApiError> {\n const problem = v.safeParse(ProblemSchema, error);\n if (!problem.success) {\n throw new Error(`Unexpected API response (status ${response.status})`);\n }\n\n const apiError = toApiError(problem.output);\n if (apiError === undefined) {\n throw new Error(`Unhandled API error type: ${problem.output.type}`);\n }\n return Result.fail(apiError);\n}\n\nfunction toApiError(\n problem: v.InferOutput<typeof ProblemSchema>,\n): ApiError | undefined {\n switch (problem.type) {\n case \"bad-request\":\n return {\n type: \"bad_request\",\n detail: problem.detail,\n fields: objectFields(problem.fields),\n };\n case \"unauthorized\":\n return { type: \"unauthorized\", detail: problem.detail };\n case \"forbidden\":\n return { type: \"forbidden\", detail: problem.detail };\n case \"not-found\":\n return { type: \"not_found\", detail: problem.detail };\n case \"conflict\":\n return { type: \"conflict\", detail: problem.detail };\n default:\n return undefined;\n }\n}\n\nfunction objectFields(\n fields: v.InferOutput<typeof ProblemSchema>[\"fields\"],\n): { field: string; message: string }[] {\n if (fields === undefined) return [];\n return fields.filter(\n (field): field is { field: string; message: string } =>\n typeof field !== \"string\",\n );\n}\n","import { Result } from \"@praha/byethrow\";\nimport type { components } from \"@orizm/internal-shared/api-clients/dev-v2\";\nimport type { DeveloperApiClient } from \"./client.js\";\nimport { toResult, type ApiError } from \"./errors.js\";\n\nexport type Organization = components[\"schemas\"][\"Organization\"];\nexport type OrganizationId = components[\"schemas\"][\"OrganizationId\"];\n\nexport async function fetchOrganizations(\n client: DeveloperApiClient,\n): Promise<Result.Result<Organization[], ApiError>> {\n return toResult(await client.GET(\"/organizations\"));\n}\n\nexport type OrganizationResolveError =\n | ApiError\n | { type: \"organization_not_found\"; name: string };\n\n// Developer API は org を数値 id でしか受けないため、name → id を一覧から解決する(ADR-004)。\nexport async function resolveOrganizationId(\n client: DeveloperApiClient,\n name: string,\n): Promise<Result.Result<OrganizationId, OrganizationResolveError>> {\n const organizations = await fetchOrganizations(client);\n if (Result.isFailure(organizations)) return organizations;\n\n const matched = organizations.value.find((org) => org.name === name);\n if (matched === undefined) {\n return Result.fail({ type: \"organization_not_found\", name });\n }\n return Result.succeed(matched.id);\n}\n","import { readFile, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nconst ENTRY = \".orizm/\";\n\n// 末尾スラッシュの有無や前後空白の揺れを許容して .orizm を無視済みか判定する。\nexport function gitignoreHasEntry(content: string): boolean {\n return content\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .some((line) => line === \".orizm\" || line === \".orizm/\");\n}\n\nfunction enoentToUndefined(error: NodeJS.ErrnoException): undefined {\n if (error.code === \"ENOENT\") return undefined;\n throw error;\n}\n\nexport async function gitignoreContainsEntry(dir: string): Promise<boolean> {\n const existing = await readFile(path.join(dir, \".gitignore\"), \"utf-8\").catch(\n enoentToUndefined,\n );\n return existing !== undefined && gitignoreHasEntry(existing);\n}\n\nexport async function appendGitignoreEntry(dir: string): Promise<void> {\n const file = path.join(dir, \".gitignore\");\n const existing = await readFile(file, \"utf-8\").catch(enoentToUndefined);\n const prefix =\n existing == null || existing === \"\" || existing.endsWith(\"\\n\")\n ? (existing ?? \"\")\n : existing + \"\\n\";\n await writeFile(file, `${prefix}${ENTRY}\\n`, \"utf-8\");\n}\n","import { Result } from \"@praha/byethrow\";\nimport type { ApiError } from \"../api/errors.js\";\nimport type { CommandFailure } from \"./define-command.js\";\n\n// API の 4xx(ApiError)を user-facing メッセージへ変換する。複数コマンドで共有する。\nexport function apiErrorFailure(\n error: ApiError,\n): Result.Result<never, CommandFailure> {\n switch (error.type) {\n case \"bad_request\": {\n const fieldLines = error.fields.map(\n (field) => `\\n - ${field.field}: ${field.message}`,\n );\n return Result.fail({ message: `${error.detail}${fieldLines.join(\"\")}` });\n }\n case \"unauthorized\":\n return Result.fail({\n message: `Not authorized: ${error.detail}. Run \\`orizm auth login\\` or check ORIZM_API_KEY.`,\n });\n case \"forbidden\":\n // 403 は権限不足以外(削除保護など)でも返るため、理由はサーバーの detail に語らせる。\n return Result.fail({ message: `Forbidden: ${error.detail}` });\n case \"not_found\":\n return Result.fail({ message: `Not found: ${error.detail}` });\n case \"conflict\":\n return Result.fail({ message: `Conflict: ${error.detail}` });\n }\n}\n","import { Result } from \"@praha/byethrow\";\nimport type { components } from \"@orizm/internal-shared/api-clients/dev-v2\";\nimport { fetchOrganizations, type Organization } from \"../api/organizations.js\";\nimport { toResult } from \"../api/errors.js\";\nimport {\n readProjectFileAt,\n resolveLinkDirectory,\n writeProjectFile,\n type ProjectContext,\n} from \"../context/project.js\";\nimport {\n appendGitignoreEntry,\n gitignoreContainsEntry,\n} from \"../context/gitignore.js\";\nimport { confirm, select } from \"../ui/prompt.js\";\nimport { apiErrorFailure } from \"./api-errors.js\";\nimport type { CommandFailure } from \"./define-command.js\";\n// link コマンドと runWithContext(project 未解決時の自動 link)の両方から使うため独立モジュールにする。\n// AuthContext は型のみの参照に留め、run-with-context.ts との循環 import を避ける。\nimport type { AuthContext } from \"./run-with-context.js\";\n\ntype Project = components[\"schemas\"][\"Project\"];\n\n// 対話部分を注入可能にして、データ取得 + 書き込みのロジックを非対話でテストできるようにする。\nexport type LinkPrompts = {\n confirmOverwrite: (existing: ProjectContext) => Promise<boolean>;\n selectOrganization: (\n organizations: Organization[],\n ) => Promise<Organization | undefined>;\n selectProject: (projects: Project[]) => Promise<Project | undefined>;\n confirmGitignore: () => Promise<boolean>;\n};\n\nexport type LinkFlowResult =\n | {\n linked: true;\n projectName: string;\n organizationName: string;\n file: string;\n gitignoreNote: string;\n }\n | { linked: false };\n\nexport async function runLinkFlow(\n ctx: AuthContext,\n options: { cwd: string; prompts: LinkPrompts },\n): Promise<Result.Result<LinkFlowResult, CommandFailure>> {\n // CWD から親方向に既存 .orizm を探し、あればそこを、無ければ CWD を対象にする。\n // read と同じ探索なので link が書く先と後続コマンドが読む先が一致する。\n const linkDir = await resolveLinkDirectory(options.cwd);\n\n // 既存リンクの誤上書きで後続コマンドが別 project を対象にしないよう、先に確認する。\n const existing = await readProjectFileAt(linkDir);\n if (existing !== undefined) {\n const overwrite = await options.prompts.confirmOverwrite(existing);\n if (!overwrite) {\n return Result.succeed({ linked: false });\n }\n }\n\n const organizations = await fetchOrganizations(ctx.client);\n if (Result.isFailure(organizations)) {\n return apiErrorFailure(organizations.error);\n }\n if (organizations.value.length === 0) {\n return Result.fail({ message: \"You do not belong to any organization.\" });\n }\n\n const organization = await options.prompts.selectOrganization(\n organizations.value,\n );\n if (organization === undefined) {\n return Result.succeed({ linked: false });\n }\n\n const projects = toResult(\n await ctx.client.GET(\"/projects\", {\n params: { query: { organizationId: organization.id } },\n }),\n );\n if (Result.isFailure(projects)) return apiErrorFailure(projects.error);\n if (projects.value.length === 0) {\n return Result.fail({\n message: `Organization \"${organization.name}\" has no projects.`,\n });\n }\n\n const project = await options.prompts.selectProject(projects.value);\n if (project === undefined) {\n return Result.succeed({ linked: false });\n }\n\n const file = await writeProjectFile(linkDir, {\n projectName: project.name,\n organizationName: organization.name,\n });\n\n const gitignoreNote = await ensureGitignore(\n linkDir,\n options.prompts.confirmGitignore,\n );\n\n return Result.succeed({\n linked: true,\n projectName: project.name,\n organizationName: organization.name,\n file,\n gitignoreNote,\n });\n}\n\n// 無視ルールは対象の .orizm と同じディレクトリに置く(git ルートまで遡らない)。\n// 「複数 .gitignore のどれか」「.git の場所」を気にせず自己完結し、Vercel と同じ挙動になる。\nasync function ensureGitignore(\n linkDir: string,\n confirmGitignore: () => Promise<boolean>,\n): Promise<string> {\n if (await gitignoreContainsEntry(linkDir)) return \"\";\n\n const approved = await confirmGitignore();\n if (!approved) {\n return \"Skipped updating .gitignore. Consider ignoring .orizm/ yourself.\";\n }\n await appendGitignoreEntry(linkDir);\n return \"Added .orizm/ to .gitignore.\";\n}\n\nasync function promptSelectFromList<T>(\n items: T[],\n message: string,\n label: (item: T) => string,\n value: (item: T) => string,\n): Promise<T | undefined> {\n const selected = await select(\n message,\n items.map((item) => ({ label: label(item), value: value(item) })),\n );\n if (selected === undefined) return undefined;\n return items.find((item) => value(item) === selected);\n}\n\nexport function defaultLinkPrompts(): LinkPrompts {\n return {\n confirmOverwrite: (existing) =>\n confirm(\n `This directory is already linked to \"${existing.projectName}\". Overwrite?`,\n false,\n ),\n selectOrganization: (organizations) =>\n promptSelectFromList(\n organizations,\n \"Select an organization:\",\n (organization) => `${organization.displayName} (${organization.name})`,\n (organization) => organization.name,\n ),\n selectProject: (projects) =>\n promptSelectFromList(\n projects,\n \"Select a project:\",\n (project) => `${project.displayName} (${project.name})`,\n (project) => project.name,\n ),\n confirmGitignore: () => confirm(\"Add .orizm/ to .gitignore?\", true),\n };\n}\n","import { Result } from \"@praha/byethrow\";\nimport { FileTokenStore, type TokenStore } from \"../auth/token-store.js\";\nimport { TokenRefresher } from \"../auth/refresh.js\";\nimport { resolveEnv, type ResolvedEnv } from \"../env.js\";\nimport { resolveProjectName } from \"../context/project.js\";\nimport { resolveCredentials } from \"../credentials/resolve.js\";\nimport {\n createAuthenticatedClient,\n type DeveloperApiClient,\n} from \"../api/client.js\";\nimport { notice } from \"../ui/output.js\";\nimport {\n defaultLinkPrompts,\n runLinkFlow,\n type LinkPrompts,\n} from \"./link-flow.js\";\nimport type { CommandFailure, CommandOutput } from \"./define-command.js\";\n\nexport type AuthContext = {\n baseUrl: string;\n client: DeveloperApiClient;\n};\n\nexport type CommandContext = AuthContext & {\n projectName: string;\n};\n\ntype RunOptions = {\n store?: TokenStore;\n cwd?: string;\n envSource?: NodeJS.ProcessEnv;\n // テストから TTY 判定と対話 link を差し替えるための注入口。\n isTTY?: boolean;\n linkPrompts?: LinkPrompts;\n};\n\ntype Handler<C> = (\n context: C,\n) => Promise<Result.Result<CommandOutput | undefined, CommandFailure>>;\n\ntype ResolvedAuth = {\n context: AuthContext;\n env: ResolvedEnv;\n};\n\nasync function resolveAuth(\n options: RunOptions,\n): Promise<Result.Result<ResolvedAuth, CommandFailure>> {\n const env = resolveEnv(options.envSource);\n if (Result.isFailure(env)) {\n return Result.fail({\n message: \"Invalid environment variable configuration for Orizm.\",\n });\n }\n\n const store = options.store ?? new FileTokenStore();\n const refresher = new TokenRefresher(store);\n\n const credentials = await resolveCredentials({\n store,\n issuerUrl: env.value.issuerUrl,\n apiKey: env.value.apiKey,\n });\n if (Result.isFailure(credentials)) {\n return Result.fail({\n message:\n \"Not authenticated. Run `orizm auth login`, or set ORIZM_API_KEY.\",\n });\n }\n\n // Bearer 経路は期限切れ + リフレッシュ失敗を早めに検知して再ログインを促す。\n if (credentials.value.type === \"bearer\") {\n const token = await refresher.getValidAccessToken(env.value.issuerUrl);\n if (Result.isFailure(token)) {\n return Result.fail({\n message:\n \"Your session has expired or was revoked. Run `orizm auth login` to sign in again.\",\n });\n }\n }\n\n const client = createAuthenticatedClient({\n baseUrl: env.value.baseUrl,\n credentials: credentials.value,\n refresher,\n });\n\n return Result.succeed({\n context: { baseUrl: env.value.baseUrl, client },\n env: env.value,\n });\n}\n\n// 認証だけ必要で Project context を取らないコマンド(org list / project list / link 等)用。\nexport async function runWithAuth(\n handler: Handler<AuthContext>,\n options: RunOptions = {},\n): Promise<Result.Result<CommandOutput | undefined, CommandFailure>> {\n const auth = await resolveAuth(options);\n if (Result.isFailure(auth)) return auth;\n return handler(auth.value.context);\n}\n\n// 各コマンドが project 解決と認証を繰り返さずビジネスロジックだけ書けるよう、\n// ここで一括解決して認証ヘッダ付与済みの client を handler に渡す。\nexport async function runWithContext(\n args: Record<string, unknown>,\n handler: Handler<CommandContext>,\n options: RunOptions = {},\n): Promise<Result.Result<CommandOutput | undefined, CommandFailure>> {\n const auth = await resolveAuth(options);\n if (Result.isFailure(auth)) return auth;\n\n const projectFlag =\n typeof args.project === \"string\" ? args.project : undefined;\n const project = await resolveProjectName({\n flag: projectFlag,\n env: auth.value.env.project,\n cwd: options.cwd,\n });\n if (Result.isFailure(project)) {\n if (project.error.type === \"no_project_context\") {\n const linked = await tryInteractiveLink(auth.value.context, options);\n if (linked !== undefined) {\n if (Result.isFailure(linked)) return linked;\n return handler({ ...auth.value.context, projectName: linked.value });\n }\n }\n return Result.fail(projectContextFailure(project.error));\n }\n\n return handler({ ...auth.value.context, projectName: project.value });\n}\n\n// project 未解決でも TTY なら対話 link を実行してそのまま続行する(ADR-004、Vercel の初回体験と同じ)。\n// 非 TTY では undefined を返し、呼び出し側が通常のエラー案内に落とす。\nasync function tryInteractiveLink(\n ctx: AuthContext,\n options: RunOptions,\n): Promise<Result.Result<string, CommandFailure> | undefined> {\n const isTTY = options.isTTY ?? process.stdin.isTTY === true;\n if (!isTTY) return undefined;\n\n notice(\"No project is linked to this directory yet. Select one to continue.\");\n const flow = await runLinkFlow(ctx, {\n cwd: options.cwd ?? process.cwd(),\n prompts: options.linkPrompts ?? defaultLinkPrompts(),\n });\n if (Result.isFailure(flow)) return flow;\n if (!flow.value.linked) {\n return Result.fail(projectContextFailure({ type: \"no_project_context\" }));\n }\n\n notice(\n `Linked to project ${flow.value.projectName} (organization ${flow.value.organizationName}).`,\n );\n if (flow.value.gitignoreNote !== \"\") {\n notice(flow.value.gitignoreNote);\n }\n return Result.succeed(flow.value.projectName);\n}\n\nfunction projectContextFailure(\n error:\n | { type: \"project_json_invalid\"; path: string }\n | { type: \"no_project_context\" },\n): CommandFailure {\n switch (error.type) {\n case \"project_json_invalid\":\n return { message: `Invalid project file: ${error.path}` };\n case \"no_project_context\":\n return {\n message:\n \"No project selected. Run `orizm link`, pass --project <name>, or set ORIZM_PROJECT.\",\n };\n }\n}\n"],"mappings":"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"}
@@ -1,12 +1,13 @@
1
1
  const require_cli_main = require('./cli/main.cjs');
2
- const require_token_store = require('./token-store--9GYVL7N.cjs');
2
+ const require_prompt = require('./prompt-C-XNDSNE.cjs');
3
+ const require_token_store = require('./token-store-BgWGhqq0.cjs');
3
4
  const require_oauth_client = require('./oauth-client-CdD0evAV.cjs');
4
5
  let _praha_byethrow = require("@praha/byethrow");
5
6
  let valibot = require("valibot");
6
7
  valibot = require_cli_main.__toESM(valibot, 1);
7
- let node_fs_promises = require("node:fs/promises");
8
8
  let node_path = require("node:path");
9
9
  node_path = require_cli_main.__toESM(node_path, 1);
10
+ let node_fs_promises = require("node:fs/promises");
10
11
 
11
12
  //#region src/cli/auth/refresh.ts
12
13
  const REFRESH_THRESHOLD_MS = 60 * 1e3;
@@ -702,27 +703,6 @@ async function appendGitignoreEntry(dir) {
702
703
  await (0, node_fs_promises.writeFile)(file, `${existing == null || existing === "" || existing.endsWith("\n") ? existing ?? "" : existing + "\n"}${ENTRY}\n`, "utf-8");
703
704
  }
704
705
 
705
- //#endregion
706
- //#region src/cli/ui/prompt.ts
707
- async function confirm(message, initial = false) {
708
- return await require_cli_main.logger.prompt(message, {
709
- type: "confirm",
710
- initial
711
- }) === true;
712
- }
713
- async function promptText(message) {
714
- const answer = await require_cli_main.logger.prompt(message, { type: "text" });
715
- return typeof answer === "string" ? answer : void 0;
716
- }
717
- async function select(message, options) {
718
- const answer = await require_cli_main.logger.prompt(message, {
719
- type: "select",
720
- options,
721
- cancel: "null"
722
- });
723
- return typeof answer === "string" ? answer : void 0;
724
- }
725
-
726
706
  //#endregion
727
707
  //#region src/cli/commands/api-errors.ts
728
708
  function apiErrorFailure(error) {
@@ -776,7 +756,7 @@ async function ensureGitignore(linkDir, confirmGitignore) {
776
756
  return "Added .orizm/ to .gitignore.";
777
757
  }
778
758
  async function promptSelectFromList(items, message, label, value) {
779
- const selected = await select(message, items.map((item) => ({
759
+ const selected = await require_prompt.select(message, items.map((item) => ({
780
760
  label: label(item),
781
761
  value: value(item)
782
762
  })));
@@ -785,10 +765,10 @@ async function promptSelectFromList(items, message, label, value) {
785
765
  }
786
766
  function defaultLinkPrompts() {
787
767
  return {
788
- confirmOverwrite: (existing) => confirm(`This directory is already linked to "${existing.projectName}". Overwrite?`, false),
768
+ confirmOverwrite: (existing) => require_prompt.confirm(`This directory is already linked to "${existing.projectName}". Overwrite?`, false),
789
769
  selectOrganization: (organizations) => promptSelectFromList(organizations, "Select an organization:", (organization) => `${organization.displayName} (${organization.name})`, (organization) => organization.name),
790
770
  selectProject: (projects) => promptSelectFromList(projects, "Select a project:", (project) => `${project.displayName} (${project.name})`, (project) => project.name),
791
- confirmGitignore: () => confirm("Add .orizm/ to .gitignore?", true)
771
+ confirmGitignore: () => require_prompt.confirm("Add .orizm/ to .gitignore?", true)
792
772
  };
793
773
  }
794
774
 
@@ -880,12 +860,6 @@ Object.defineProperty(exports, 'apiErrorFailure', {
880
860
  return apiErrorFailure;
881
861
  }
882
862
  });
883
- Object.defineProperty(exports, 'confirm', {
884
- enumerable: true,
885
- get: function () {
886
- return confirm;
887
- }
888
- });
889
863
  Object.defineProperty(exports, 'defaultLinkPrompts', {
890
864
  enumerable: true,
891
865
  get: function () {
@@ -898,12 +872,6 @@ Object.defineProperty(exports, 'fetchOrganizations', {
898
872
  return fetchOrganizations;
899
873
  }
900
874
  });
901
- Object.defineProperty(exports, 'promptText', {
902
- enumerable: true,
903
- get: function () {
904
- return promptText;
905
- }
906
- });
907
875
  Object.defineProperty(exports, 'resolveOrganizationId', {
908
876
  enumerable: true,
909
877
  get: function () {
@@ -940,4 +908,4 @@ Object.defineProperty(exports, 'toResult', {
940
908
  return toResult;
941
909
  }
942
910
  });
943
- //# sourceMappingURL=run-with-context-DJNnEigg.cjs.map
911
+ //# sourceMappingURL=run-with-context-D8pSrqD_.cjs.map