@orizm/cli 2.2.7 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (320) hide show
  1. package/README.md +111 -4
  2. package/dist/array-update-CMFUoQEe.mjs +41 -0
  3. package/dist/array-update-CMFUoQEe.mjs.map +1 -0
  4. package/dist/array-update-Dch4e9tI.cjs +58 -0
  5. package/dist/array-update-Dch4e9tI.cjs.map +1 -0
  6. package/dist/auth-BGW072BP.mjs +18 -0
  7. package/dist/auth-BGW072BP.mjs.map +1 -0
  8. package/dist/auth-CNbONZuf.cjs +18 -0
  9. package/dist/auth-CNbONZuf.cjs.map +1 -0
  10. package/dist/bucket-6d3VNt1D.mjs +17 -0
  11. package/dist/bucket-6d3VNt1D.mjs.map +1 -0
  12. package/dist/bucket-DjbHz9_A.cjs +17 -0
  13. package/dist/bucket-DjbHz9_A.cjs.map +1 -0
  14. package/dist/cli/main.cjs +231 -0
  15. package/dist/cli/main.cjs.map +1 -0
  16. package/dist/cli/main.d.cts +1 -0
  17. package/dist/cli/main.d.mts +1 -0
  18. package/dist/cli/main.mjs +196 -0
  19. package/dist/cli/main.mjs.map +1 -0
  20. package/dist/cms-BJnovGYT.mjs +172 -0
  21. package/dist/cms-BJnovGYT.mjs.map +1 -0
  22. package/dist/cms-Cnx-lDGu.cjs +172 -0
  23. package/dist/cms-Cnx-lDGu.cjs.map +1 -0
  24. package/dist/codegen-BF5b-u46.cjs +17 -0
  25. package/dist/codegen-BF5b-u46.cjs.map +1 -0
  26. package/dist/codegen-DZOB4ttR.mjs +17 -0
  27. package/dist/codegen-DZOB4ttR.mjs.map +1 -0
  28. package/dist/config/index.cjs +49 -96
  29. package/dist/config/index.cjs.map +1 -1
  30. package/dist/config/index.d.cts +1 -53
  31. package/dist/config/{index.d.ts → index.d.mts} +29 -27
  32. package/dist/config/index.d.mts.map +1 -0
  33. package/dist/config/index.mjs +59 -0
  34. package/dist/config/index.mjs.map +1 -0
  35. package/dist/config-loader-BEgS869e.mjs +65 -0
  36. package/dist/config-loader-BEgS869e.mjs.map +1 -0
  37. package/dist/config-loader-D8x32gEU.cjs +78 -0
  38. package/dist/config-loader-D8x32gEU.cjs.map +1 -0
  39. package/dist/confirm-delete-B9o73U7B.cjs +19 -0
  40. package/dist/confirm-delete-B9o73U7B.cjs.map +1 -0
  41. package/dist/confirm-delete-CsWkW69-.mjs +14 -0
  42. package/dist/confirm-delete-CsWkW69-.mjs.map +1 -0
  43. package/dist/consumer-BBsH8b1j.cjs +18 -0
  44. package/dist/consumer-BBsH8b1j.cjs.map +1 -0
  45. package/dist/consumer-DqyRfpsl.mjs +18 -0
  46. package/dist/consumer-DqyRfpsl.mjs.map +1 -0
  47. package/dist/consumer-OF6Z_eTP.cjs +95 -0
  48. package/dist/consumer-OF6Z_eTP.cjs.map +1 -0
  49. package/dist/consumer-pU2HyiyA.mjs +95 -0
  50. package/dist/consumer-pU2HyiyA.mjs.map +1 -0
  51. package/dist/content-BsoRmjis.mjs +20 -0
  52. package/dist/content-BsoRmjis.mjs.map +1 -0
  53. package/dist/content-Y-2Y0cyn.cjs +20 -0
  54. package/dist/content-Y-2Y0cyn.cjs.map +1 -0
  55. package/dist/create--1NYduI_.cjs +58 -0
  56. package/dist/create--1NYduI_.cjs.map +1 -0
  57. package/dist/create-B-PAOor6.mjs +66 -0
  58. package/dist/create-B-PAOor6.mjs.map +1 -0
  59. package/dist/create-BNYWcyuQ.cjs +66 -0
  60. package/dist/create-BNYWcyuQ.cjs.map +1 -0
  61. package/dist/create-B_gsZCL-.cjs +54 -0
  62. package/dist/create-B_gsZCL-.cjs.map +1 -0
  63. package/dist/create-BqlxdhcR.mjs +81 -0
  64. package/dist/create-BqlxdhcR.mjs.map +1 -0
  65. package/dist/create-CC814ixh.mjs +66 -0
  66. package/dist/create-CC814ixh.mjs.map +1 -0
  67. package/dist/create-CkFBiEDH.mjs +58 -0
  68. package/dist/create-CkFBiEDH.mjs.map +1 -0
  69. package/dist/create-CykRHseR.cjs +81 -0
  70. package/dist/create-CykRHseR.cjs.map +1 -0
  71. package/dist/create-RLyp_dl6.mjs +54 -0
  72. package/dist/create-RLyp_dl6.mjs.map +1 -0
  73. package/dist/create-Z-z3LXNW.cjs +66 -0
  74. package/dist/create-Z-z3LXNW.cjs.map +1 -0
  75. package/dist/delete-8yZ3j0vX.cjs +59 -0
  76. package/dist/delete-8yZ3j0vX.cjs.map +1 -0
  77. package/dist/delete-BOUObrDw.mjs +48 -0
  78. package/dist/delete-BOUObrDw.mjs.map +1 -0
  79. package/dist/delete-BSLIXrAh.mjs +59 -0
  80. package/dist/delete-BSLIXrAh.mjs.map +1 -0
  81. package/dist/delete-BenBNL2p.mjs +56 -0
  82. package/dist/delete-BenBNL2p.mjs.map +1 -0
  83. package/dist/delete-Bx2oNROv.cjs +56 -0
  84. package/dist/delete-Bx2oNROv.cjs.map +1 -0
  85. package/dist/delete-CCTiCYIL.cjs +51 -0
  86. package/dist/delete-CCTiCYIL.cjs.map +1 -0
  87. package/dist/delete-CGW0VMK6.cjs +56 -0
  88. package/dist/delete-CGW0VMK6.cjs.map +1 -0
  89. package/dist/delete-CIYY59v_.cjs +48 -0
  90. package/dist/delete-CIYY59v_.cjs.map +1 -0
  91. package/dist/delete-CSSd0gmt.mjs +56 -0
  92. package/dist/delete-CSSd0gmt.mjs.map +1 -0
  93. package/dist/delete-CSs5Czlo.mjs +59 -0
  94. package/dist/delete-CSs5Czlo.mjs.map +1 -0
  95. package/dist/delete-CrOVRvMo.cjs +56 -0
  96. package/dist/delete-CrOVRvMo.cjs.map +1 -0
  97. package/dist/delete-DehKYCXh.mjs +56 -0
  98. package/dist/delete-DehKYCXh.mjs.map +1 -0
  99. package/dist/delete-DhSU-Lx2.mjs +51 -0
  100. package/dist/delete-DhSU-Lx2.mjs.map +1 -0
  101. package/dist/delete-DozSxZQ7.cjs +59 -0
  102. package/dist/delete-DozSxZQ7.cjs.map +1 -0
  103. package/dist/detail-8CXNIhKw.cjs +16 -0
  104. package/dist/detail-8CXNIhKw.cjs.map +1 -0
  105. package/dist/detail-DN5jCQ4N.mjs +10 -0
  106. package/dist/detail-DN5jCQ4N.mjs.map +1 -0
  107. package/dist/download-oFGzg30E.mjs +68 -0
  108. package/dist/download-oFGzg30E.mjs.map +1 -0
  109. package/dist/download-ogGbb3FU.cjs +68 -0
  110. package/dist/download-ogGbb3FU.cjs.map +1 -0
  111. package/dist/erd-lKC5NB2l.cjs +124 -0
  112. package/dist/erd-lKC5NB2l.cjs.map +1 -0
  113. package/dist/erd-zDoF6I_y.mjs +123 -0
  114. package/dist/erd-zDoF6I_y.mjs.map +1 -0
  115. package/dist/get-BBOKSXkh.cjs +48 -0
  116. package/dist/get-BBOKSXkh.cjs.map +1 -0
  117. package/dist/get-BHniACk5.cjs +57 -0
  118. package/dist/get-BHniACk5.cjs.map +1 -0
  119. package/dist/get-BtmzDaVn.mjs +47 -0
  120. package/dist/get-BtmzDaVn.mjs.map +1 -0
  121. package/dist/get-CVV3h6HR.cjs +47 -0
  122. package/dist/get-CVV3h6HR.cjs.map +1 -0
  123. package/dist/get-CgEgETQa.mjs +52 -0
  124. package/dist/get-CgEgETQa.mjs.map +1 -0
  125. package/dist/get-DB80UNSR.mjs +47 -0
  126. package/dist/get-DB80UNSR.mjs.map +1 -0
  127. package/dist/get-DBxhbN1G.mjs +57 -0
  128. package/dist/get-DBxhbN1G.mjs.map +1 -0
  129. package/dist/get-DDB89cOs.mjs +48 -0
  130. package/dist/get-DDB89cOs.mjs.map +1 -0
  131. package/dist/get-DPGx1zU4.mjs +56 -0
  132. package/dist/get-DPGx1zU4.mjs.map +1 -0
  133. package/dist/get-IOU__2RP.cjs +52 -0
  134. package/dist/get-IOU__2RP.cjs.map +1 -0
  135. package/dist/get-KdWfYINc.cjs +47 -0
  136. package/dist/get-KdWfYINc.cjs.map +1 -0
  137. package/dist/get-jwXRlIBJ.cjs +57 -0
  138. package/dist/get-jwXRlIBJ.cjs.map +1 -0
  139. package/dist/group-roles-BEEzLxPX.mjs +36 -0
  140. package/dist/group-roles-BEEzLxPX.mjs.map +1 -0
  141. package/dist/group-roles-Bl_mEodO.cjs +59 -0
  142. package/dist/group-roles-Bl_mEodO.cjs.map +1 -0
  143. package/dist/invite-DsOCKGTJ.mjs +66 -0
  144. package/dist/invite-DsOCKGTJ.mjs.map +1 -0
  145. package/dist/invite-Dts9uNQL.cjs +66 -0
  146. package/dist/invite-Dts9uNQL.cjs.map +1 -0
  147. package/dist/key-BogfSiz_.mjs +17 -0
  148. package/dist/key-BogfSiz_.mjs.map +1 -0
  149. package/dist/key-Czwiu2pW.cjs +17 -0
  150. package/dist/key-Czwiu2pW.cjs.map +1 -0
  151. package/dist/link-BluFyxEL.mjs +42 -0
  152. package/dist/link-BluFyxEL.mjs.map +1 -0
  153. package/dist/link-DYu1Vjlw.cjs +42 -0
  154. package/dist/link-DYu1Vjlw.cjs.map +1 -0
  155. package/dist/list-2BpPj4Z0.cjs +40 -0
  156. package/dist/list-2BpPj4Z0.cjs.map +1 -0
  157. package/dist/list-57TUfNFd.mjs +48 -0
  158. package/dist/list-57TUfNFd.mjs.map +1 -0
  159. package/dist/list-60NcDr0q.cjs +81 -0
  160. package/dist/list-60NcDr0q.cjs.map +1 -0
  161. package/dist/list-BRh59EqI.cjs +35 -0
  162. package/dist/list-BRh59EqI.cjs.map +1 -0
  163. package/dist/list-BwfpuhmJ.cjs +37 -0
  164. package/dist/list-BwfpuhmJ.cjs.map +1 -0
  165. package/dist/list-CJuefq_I.cjs +82 -0
  166. package/dist/list-CJuefq_I.cjs.map +1 -0
  167. package/dist/list-CYE9Exi3.cjs +72 -0
  168. package/dist/list-CYE9Exi3.cjs.map +1 -0
  169. package/dist/list-CbvEh7eA.mjs +35 -0
  170. package/dist/list-CbvEh7eA.mjs.map +1 -0
  171. package/dist/list-CfIeReBx.mjs +82 -0
  172. package/dist/list-CfIeReBx.mjs.map +1 -0
  173. package/dist/list-CxHDoXjv.mjs +81 -0
  174. package/dist/list-CxHDoXjv.mjs.map +1 -0
  175. package/dist/list-D0-QrWmn.cjs +51 -0
  176. package/dist/list-D0-QrWmn.cjs.map +1 -0
  177. package/dist/list-D24J_Qbm.mjs +49 -0
  178. package/dist/list-D24J_Qbm.mjs.map +1 -0
  179. package/dist/list-D5PSDMWw.mjs +51 -0
  180. package/dist/list-D5PSDMWw.mjs.map +1 -0
  181. package/dist/list-DRKF2uKW.cjs +95 -0
  182. package/dist/list-DRKF2uKW.cjs.map +1 -0
  183. package/dist/list-DdJ05juK.mjs +72 -0
  184. package/dist/list-DdJ05juK.mjs.map +1 -0
  185. package/dist/list-DlJssPwy.cjs +48 -0
  186. package/dist/list-DlJssPwy.cjs.map +1 -0
  187. package/dist/list-V3W6hvOa.cjs +49 -0
  188. package/dist/list-V3W6hvOa.cjs.map +1 -0
  189. package/dist/list-rAn3uOA7.mjs +37 -0
  190. package/dist/list-rAn3uOA7.mjs.map +1 -0
  191. package/dist/list-syVDGkVR.mjs +40 -0
  192. package/dist/list-syVDGkVR.mjs.map +1 -0
  193. package/dist/list-yQZLzkC7.mjs +95 -0
  194. package/dist/list-yQZLzkC7.mjs.map +1 -0
  195. package/dist/login-2XcHd4wn.cjs +212 -0
  196. package/dist/login-2XcHd4wn.cjs.map +1 -0
  197. package/dist/login-FE_dbWMo.mjs +211 -0
  198. package/dist/login-FE_dbWMo.mjs.map +1 -0
  199. package/dist/logout-BDbWrGBm.mjs +35 -0
  200. package/dist/logout-BDbWrGBm.mjs.map +1 -0
  201. package/dist/logout-DC5TMJ5_.cjs +35 -0
  202. package/dist/logout-DC5TMJ5_.cjs.map +1 -0
  203. package/dist/management-BaN1Nynl.mjs +19 -0
  204. package/dist/management-BaN1Nynl.mjs.map +1 -0
  205. package/dist/management-DHXxdCra.cjs +19 -0
  206. package/dist/management-DHXxdCra.cjs.map +1 -0
  207. package/dist/mask-B1qD73jb.mjs +22 -0
  208. package/dist/mask-B1qD73jb.mjs.map +1 -0
  209. package/dist/mask-CqYLib9p.cjs +40 -0
  210. package/dist/mask-CqYLib9p.cjs.map +1 -0
  211. package/dist/oauth-client-CdD0evAV.cjs +170 -0
  212. package/dist/oauth-client-CdD0evAV.cjs.map +1 -0
  213. package/dist/oauth-client-QHuDa4fW.mjs +139 -0
  214. package/dist/oauth-client-QHuDa4fW.mjs.map +1 -0
  215. package/dist/object-BfUf8Y6w.mjs +20 -0
  216. package/dist/object-BfUf8Y6w.mjs.map +1 -0
  217. package/dist/object-DT7UEW9G.cjs +20 -0
  218. package/dist/object-DT7UEW9G.cjs.map +1 -0
  219. package/dist/org-C4cVovOM.cjs +14 -0
  220. package/dist/org-C4cVovOM.cjs.map +1 -0
  221. package/dist/org-CPhTRTks.mjs +14 -0
  222. package/dist/org-CPhTRTks.mjs.map +1 -0
  223. package/dist/org-context-Bewx2NEW.cjs +30 -0
  224. package/dist/org-context-Bewx2NEW.cjs.map +1 -0
  225. package/dist/org-context-D0dwWC2M.mjs +25 -0
  226. package/dist/org-context-D0dwWC2M.mjs.map +1 -0
  227. package/dist/parse-BeO2IwfI.cjs +229 -0
  228. package/dist/parse-BeO2IwfI.cjs.map +1 -0
  229. package/dist/parse-CA5fBB3x.mjs +150 -0
  230. package/dist/parse-CA5fBB3x.mjs.map +1 -0
  231. package/dist/project-CNr9xMny.cjs +20 -0
  232. package/dist/project-CNr9xMny.cjs.map +1 -0
  233. package/dist/project-DFoHcXi5.mjs +20 -0
  234. package/dist/project-DFoHcXi5.mjs.map +1 -0
  235. package/dist/project-name-CEoM-OL4.cjs +18 -0
  236. package/dist/project-name-CEoM-OL4.cjs.map +1 -0
  237. package/dist/project-name-DNMejnzZ.mjs +12 -0
  238. package/dist/project-name-DNMejnzZ.mjs.map +1 -0
  239. package/dist/project-user-9D7Ey_Fu.mjs +20 -0
  240. package/dist/project-user-9D7Ey_Fu.mjs.map +1 -0
  241. package/dist/project-user-DTPFjyfZ.cjs +20 -0
  242. package/dist/project-user-DTPFjyfZ.cjs.map +1 -0
  243. package/dist/push-0u6PDz4E.cjs +166 -0
  244. package/dist/push-0u6PDz4E.cjs.map +1 -0
  245. package/dist/push-D7co0keA.mjs +166 -0
  246. package/dist/push-D7co0keA.mjs.map +1 -0
  247. package/dist/run-codegen-Ceeosw5x.cjs +272 -0
  248. package/dist/run-codegen-Ceeosw5x.cjs.map +1 -0
  249. package/dist/run-codegen-DgaFaIQ1.mjs +190 -0
  250. package/dist/run-codegen-DgaFaIQ1.mjs.map +1 -0
  251. package/dist/run-with-context-CVhmzAFZ.mjs +876 -0
  252. package/dist/run-with-context-CVhmzAFZ.mjs.map +1 -0
  253. package/dist/run-with-context-DJNnEigg.cjs +943 -0
  254. package/dist/run-with-context-DJNnEigg.cjs.map +1 -0
  255. package/dist/schema-DDzrgjkT.mjs +20 -0
  256. package/dist/schema-DDzrgjkT.mjs.map +1 -0
  257. package/dist/schema-DdhyEh81.cjs +20 -0
  258. package/dist/schema-DdhyEh81.cjs.map +1 -0
  259. package/dist/shared-CZZimGxc.mjs +35 -0
  260. package/dist/shared-CZZimGxc.mjs.map +1 -0
  261. package/dist/shared-DHRPzzKl.cjs +59 -0
  262. package/dist/shared-DHRPzzKl.cjs.map +1 -0
  263. package/dist/status-Dq_NJE71.cjs +49 -0
  264. package/dist/status-Dq_NJE71.cjs.map +1 -0
  265. package/dist/status-fWqXzV0P.mjs +49 -0
  266. package/dist/status-fWqXzV0P.mjs.map +1 -0
  267. package/dist/table-C74eOSh8.cjs +27 -0
  268. package/dist/table-C74eOSh8.cjs.map +1 -0
  269. package/dist/table-MHEfbnWO.mjs +20 -0
  270. package/dist/table-MHEfbnWO.mjs.map +1 -0
  271. package/dist/table-event-C16cp9nq.mjs +72 -0
  272. package/dist/table-event-C16cp9nq.mjs.map +1 -0
  273. package/dist/table-event-D7PPuS7E.cjs +101 -0
  274. package/dist/table-event-D7PPuS7E.cjs.map +1 -0
  275. package/dist/token-store--9GYVL7N.cjs +139 -0
  276. package/dist/token-store--9GYVL7N.cjs.map +1 -0
  277. package/dist/token-store-reCGF86F.mjs +124 -0
  278. package/dist/token-store-reCGF86F.mjs.map +1 -0
  279. package/dist/update-8e3u4jKa.mjs +109 -0
  280. package/dist/update-8e3u4jKa.mjs.map +1 -0
  281. package/dist/update-CDLviRuu.cjs +73 -0
  282. package/dist/update-CDLviRuu.cjs.map +1 -0
  283. package/dist/update-CSiOfiPL.mjs +117 -0
  284. package/dist/update-CSiOfiPL.mjs.map +1 -0
  285. package/dist/update-CjbcI8Qc.mjs +61 -0
  286. package/dist/update-CjbcI8Qc.mjs.map +1 -0
  287. package/dist/update-Cktd0zXA.cjs +109 -0
  288. package/dist/update-Cktd0zXA.cjs.map +1 -0
  289. package/dist/update-D-X32BVW.cjs +117 -0
  290. package/dist/update-D-X32BVW.cjs.map +1 -0
  291. package/dist/update-DfYV_TQb.mjs +171 -0
  292. package/dist/update-DfYV_TQb.mjs.map +1 -0
  293. package/dist/update-OWC5K8Ne.cjs +61 -0
  294. package/dist/update-OWC5K8Ne.cjs.map +1 -0
  295. package/dist/update-ap5Qv1Yl.cjs +171 -0
  296. package/dist/update-ap5Qv1Yl.cjs.map +1 -0
  297. package/dist/update-yscrx6WQ.mjs +73 -0
  298. package/dist/update-yscrx6WQ.mjs.map +1 -0
  299. package/dist/upload-C43ZXxyb.cjs +95 -0
  300. package/dist/upload-C43ZXxyb.cjs.map +1 -0
  301. package/dist/upload-DGgJ1TQk.mjs +94 -0
  302. package/dist/upload-DGgJ1TQk.mjs.map +1 -0
  303. package/dist/validate-BpxZ8LTl.cjs +31 -0
  304. package/dist/validate-BpxZ8LTl.cjs.map +1 -0
  305. package/dist/validate-Ca0CRo16.mjs +31 -0
  306. package/dist/validate-Ca0CRo16.mjs.map +1 -0
  307. package/dist/webhook-3zs6Ulxd.mjs +20 -0
  308. package/dist/webhook-3zs6Ulxd.mjs.map +1 -0
  309. package/dist/webhook-BsygMMf-.cjs +20 -0
  310. package/dist/webhook-BsygMMf-.cjs.map +1 -0
  311. package/package.json +27 -16
  312. package/bin/index.js +0 -3
  313. package/dist/cli.cjs +0 -1978
  314. package/dist/cli.cjs.map +0 -1
  315. package/dist/cli.d.cts +0 -2
  316. package/dist/cli.d.ts +0 -2
  317. package/dist/cli.js +0 -1954
  318. package/dist/cli.js.map +0 -1
  319. package/dist/config/index.js +0 -81
  320. package/dist/config/index.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-with-context-CVhmzAFZ.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/ui/prompt.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 { logger } from \"./output.js\";\n\n// プロンプトは stderr に出す。stdout は機械可読な結果専用に空けておき、パイプ連結を壊さないため。\nexport async function confirm(\n message: string,\n initial = false,\n): Promise<boolean> {\n const answer = await logger.prompt(message, { type: \"confirm\", initial });\n return answer === true;\n}\n\nexport async function promptText(message: string): Promise<string | undefined> {\n const answer = await logger.prompt(message, { type: \"text\" });\n return typeof answer === \"string\" ? answer : undefined;\n}\n\n// 選択肢の value は文字列のみ(consola の SelectOption 制約)。呼び出し側で name 等の一意キーを value に載せる。\nexport async function select(\n message: string,\n options: { label: string; value: string }[],\n): Promise<string | undefined> {\n const answer = await logger.prompt(message, {\n type: \"select\",\n options,\n cancel: \"null\",\n });\n return typeof answer === \"string\" ? answer : undefined;\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":";;;;;;;;;AAIA,MAAM,uBAAuB,KAAK;AAMlC,IAAa,iBAAb,MAA4B;CAC1B,AAASA;CAGT,AAASC,4BAAY,IAAI,IAGvB;CAEF,YAAY,OAAmB;EAC7B,KAAKD,SAAS;CAChB;CAEA,MAAM,oBACJ,WAC8C;EAC9C,MAAM,QAAQ,MAAM,KAAKA,OAAO,IAAI,SAAS;EAC7C,IAAI,UAAU,QAAW,OAAO,OAAO,KAAK,EAAE,MAAM,WAAW,CAAC;EAChE,IAAI,CAAC,eAAe,MAAM,SAAS,GACjC,OAAO,OAAO,QAAQ,MAAM,WAAW;EAEzC,OAAO,KAAKE,eAAe,KAAKC,aAAa,SAAS,CAAC;CACzD;CAGA,MAAM,aACJ,WAC8C;EAC9C,OAAO,KAAKD,eAAe,KAAKC,aAAa,SAAS,CAAC;CACzD;CAEA,MAAMD,eACJ,SAC8C;EAC9C,MAAM,SAAS,MAAM;EACrB,IAAI,OAAO,UAAU,MAAM,GAAG,OAAO;EACrC,OAAO,OAAO,QAAQ,OAAO,MAAM,WAAW;CAChD;CAEA,aACE,WACkD;EAClD,MAAM,WAAW,KAAKD,UAAU,IAAI,SAAS;EAC7C,IAAI,aAAa,QAAW,OAAO;EAEnC,MAAM,UAAU,KAAKG,WAAW,SAAS,CAAC,CAAC,cACzC,KAAKH,UAAU,OAAO,SAAS,CACjC;EACA,KAAKA,UAAU,IAAI,WAAW,OAAO;EACrC,OAAO;CACT;CAEA,MAAMG,WACJ,WACkD;EAClD,MAAM,QAAQ,MAAM,KAAKJ,OAAO,IAAI,SAAS;EAC7C,IAAI,UAAU,QAAW,OAAO,OAAO,KAAK,EAAE,MAAM,WAAW,CAAC;EAEhE,MAAM,YAAY,MAAM,cAAc;GACpC;GACA,cAAc,MAAM;EACtB,CAAC;EACD,IAAI,OAAO,UAAU,SAAS,GAAG;GAE/B,MAAM,KAAKA,OAAO,OAAO,SAAS;GAClC,OAAO,OAAO,KAAK;IACjB,MAAM;IACN,QAAQ,UAAU,MAAM;GAC1B,CAAC;EACH;EAEA,MAAM,UAAsB;GAC1B,GAAG;GACH,aAAa,UAAU,MAAM;GAC7B,cAAc,UAAU,MAAM;GAC9B,SAAS,UAAU,MAAM;GACzB,OAAO,UAAU,MAAM;GACvB,WAAW,UAAU,MAAM;EAC7B;EAGA,MAAM,KAAKA,OAAO,IAAI,WAAW,OAAO;EACxC,OAAO,OAAO,QAAQ,OAAO;CAC/B;AACF;AAEA,SAAS,eAAe,WAA4B;CAElD,OADkB,KAAK,MAAM,SAAS,IAAI,KAAK,IAAI,KAC/B;AACtB;;;;ACnFA,MAAM,oBAAoB,EAAE,OAAO;CACjC,aAAa,EAAE,KAAK,EAAE,OAAO,GAAG,EAAE,SAAS,CAAC;CAC5C,kBAAkB,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,EAAE,SAAS,CAAC,CAAC;AAC/D,CAAC;AAMD,eAAsB,uBACpB,MAAc,QAAQ,IAAI,GACiD;CAC3E,IAAI,MAAM,KAAK,QAAQ,GAAG;CAC1B,SAAS;EACP,MAAM,OAAO,KAAK,KAAK,KAAK,UAAU,cAAc;EACpD,MAAM,MAAM,MAAM,SAAS,MAAM,OAAO,CAAC,CAAC,OACvC,UAAiC;GAChC,IAAI,MAAM,SAAS,UAAU,OAAO;GACpC,MAAM;EACR,CACF;EAEA,IAAI,QAAQ,QAAW;GACrB,MAAM,SAAS,EAAE,UAAU,mBAAmB,cAAc,GAAG,CAAC;GAChE,IAAI,CAAC,OAAO,SACV,OAAO,OAAO,KAAK;IAAE,MAAM;IAAwB,MAAM;GAAK,CAAC;GAEjE,OAAO,OAAO,QAAQ;IAAE,MAAM;IAAM,SAAS,OAAO;GAAO,CAAC;EAC9D;EAEA,MAAM,SAAS,KAAK,QAAQ,GAAG;EAC/B,IAAI,WAAW,KAAK,OAAO,OAAO,QAAQ,MAAS;EACnD,MAAM;CACR;AACF;AAGA,eAAsB,mBAAmB,QAIe;CACtD,IAAI,OAAO,QAAQ,QAAQ,OAAO,SAAS,IACzC,OAAO,OAAO,QAAQ,OAAO,IAAI;CAEnC,IAAI,OAAO,OAAO,QAAQ,OAAO,QAAQ,IACvC,OAAO,OAAO,QAAQ,OAAO,GAAG;CAGlC,MAAM,QAAQ,MAAM,uBAAuB,OAAO,GAAG;CACrD,IAAI,OAAO,UAAU,KAAK,GAAG,OAAO;CACpC,IAAI,MAAM,UAAU,QAClB,OAAO,OAAO,KAAK,EAAE,MAAM,qBAAqB,CAAC;CAEnD,OAAO,OAAO,QAAQ,MAAM,MAAM,QAAQ,WAAW;AACvD;AAIA,eAAsB,wBAAwB,QAK5C;CACA,IAAI,OAAO,QAAQ,QAAQ,OAAO,SAAS,IACzC,OAAO,OAAO,QAAQ,OAAO,IAAI;CAGnC,MAAM,QAAQ,MAAM,uBAAuB,OAAO,GAAG;CACrD,IAAI,OAAO,UAAU,KAAK,GAAG,OAAO;CAEpC,MAAM,mBAAmB,MAAM,OAAO,QAAQ;CAC9C,IAAI,oBAAoB,QAAQ,qBAAqB,IACnD,OAAO,OAAO,KAAK,EAAE,MAAM,0BAA0B,CAAC;CAExD,OAAO,OAAO,QAAQ,gBAAgB;AACxC;AAKA,eAAsB,qBACpB,MAAc,QAAQ,IAAI,GACT;CACjB,IAAI,MAAM,KAAK,QAAQ,GAAG;CAC1B,SAAS;EAKP,IAAI,MAJiB,OAAO,KAAK,KAAK,KAAK,UAAU,cAAc,CAAC,CAAC,CAAC,WAC9D,YACA,KACR,GACY,OAAO;EAEnB,MAAM,SAAS,KAAK,QAAQ,GAAG;EAC/B,IAAI,WAAW,KAAK,OAAO,KAAK,QAAQ,GAAG;EAC3C,MAAM;CACR;AACF;AAGA,eAAsB,kBACpB,KACqC;CAErC,MAAM,MAAM,MAAM,SADL,KAAK,KAAK,KAAK,QAAQ,GAAG,GAAG,UAAU,cACtB,GAAG,OAAO,CAAC,CAAC,OACvC,UAAiC;EAChC,IAAI,MAAM,SAAS,UAAU,OAAO;EACpC,MAAM;CACR,CACF;CACA,IAAI,QAAQ,QAAW,OAAO;CAE9B,MAAM,SAAS,EAAE,UAAU,mBAAmB,cAAc,GAAG,CAAC;CAChE,OAAO,OAAO,UAAU,OAAO,SAAS;AAC1C;AAGA,eAAsB,iBACpB,KACA,SACiB;CACjB,MAAM,WAAW,KAAK,KAAK,KAAK,QAAQ,GAAG,GAAG,QAAQ;CACtD,MAAM,MAAM,UAAU,EAAE,WAAW,KAAK,CAAC;CACzC,MAAM,OAAO,KAAK,KAAK,UAAU,cAAc;CAC/C,MAAM,UAAU,MAAM,KAAK,UAAU,SAAS,MAAM,CAAC,IAAI,MAAM,OAAO;CACtE,OAAO;AACT;AAEA,SAAS,cAAc,KAAsB;CAC3C,IAAI;EACF,OAAO,KAAK,MAAM,GAAG;CACvB,QAAQ;EACN;CACF;AACF;;;;AC1IA,eAAsB,mBAAmB,QAIwB;CAE/D,IAAI,MADgB,OAAO,MAAM,IAAI,OAAO,SAAS,MACvC,QACZ,OAAO,OAAO,QAAQ;EAAE,MAAM;EAAU,WAAW,OAAO;CAAU,CAAC;CAEvE,IAAI,OAAO,WAAW,QACpB,OAAO,OAAO,QAAQ;EAAE,MAAM;EAAW,QAAQ,OAAO;CAAO,CAAC;CAElE,OAAO,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAC/C;;;;ACxBA,MAAM,gBAAgB;AACtB,MAAM,+BAA+B;CACpC,OAAO,OAAO,YAAY,YAAY,OAAO,SAAS,SAAS,UAAU,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,MAAM,QAAQ,SAAS;AAC3H;AACA,SAAS,WAAW;CACnB,OAAO,KAAK,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,GAAG,EAAE;AAC9C;AACA,SAAS,aAAa,eAAe;CACpC,IAAI,EAAE,UAAU,IAAI,SAAS,gBAAgB,WAAW,SAAS,OAAO,YAAY,WAAW,OAAO,iBAAiB,uBAAuB,gBAAgB,sBAAsB,gBAAgB,sBAAsB,SAAS,aAAa,iBAAiB,KAAK,GAAG,GAAG,gBAAgB,EAAE,GAAG,cAAc;CAC/S,iBAAiB,uBAAuB,IAAI,iBAAiB,KAAK;CAClE,UAAU,oBAAoB,OAAO;CACrC,MAAM,oBAAoB,CAAC;CAC3B,eAAe,UAAU,YAAY,cAAc;EAClD,MAAM,EAAE,SAAS,cAAc,QAAQ,WAAW,UAAU,eAAe,SAAS,SAAS,CAAC,GAAG,UAAU,QAAQ,iBAAiB,wBAAwB,iBAAiB,wBAAwB,uBAAuB,gBAAgB,uBAAuB,MAAM,YAAY,qBAAqB,CAAC,GAAG,GAAG,SAAS,gBAAgB,CAAC;EAC3U,IAAI,eAAe;EACnB,IAAI,cAAc,eAAe,oBAAoB,YAAY,KAAK;EACtE,IAAI,kBAAkB,OAAO,0BAA0B,aAAa,wBAAwB,sBAAsB,qBAAqB;EACvI,IAAI,wBAAwB,kBAAkB,OAAO,2BAA2B,aAAa,yBAAyB,sBAAsB;GAC3I,GAAG,OAAO,0BAA0B,WAAW,wBAAwB,CAAC;GACxE,GAAG;EACJ,CAAC;EACD,MAAM,iBAAiB,yBAAyB,wBAAwB;EACxE,MAAM,iBAAiB,SAAS,KAAK,IAAI,KAAK,IAAI,eAAe,MAAM,aAAa,aAAa,SAAS,OAAO,MAAM,CAAC;EACxH,MAAM,eAAe,aAAa,mBAAmB,KAAK,KAAK,0BAA0B,WAAW,CAAC,IAAI,EAAE,gBAAgB,mBAAmB,GAAG,aAAa,SAAS,OAAO,MAAM;EACpL,MAAM,mBAAmB,CAAC,GAAG,mBAAmB,GAAG,kBAAkB;EACrE,MAAM,cAAc;GACnB,UAAU;GACV,GAAG;GACH,GAAG;GACH,MAAM;GACN,SAAS;EACV;EACA,IAAI;EACJ,IAAI;EACJ,IAAI,UAAU,IAAI,QAAQ,eAAe,YAAY;GACpD,SAAS;GACT;GACA;GACA;EACD,CAAC,GAAG,WAAW;EACf,IAAI;EACJ,KAAK,MAAM,OAAO,MAAM,IAAI,EAAE,OAAO,UAAU,QAAQ,OAAO,KAAK;EACnE,IAAI,iBAAiB,QAAQ;GAC5B,KAAK,SAAS;GACd,UAAU,OAAO,OAAO;IACvB,SAAS;IACT;IACA;IACA;IACA;IACA;GACD,CAAC;GACD,KAAK,MAAM,KAAK,kBAAkB,IAAI,KAAK,OAAO,MAAM,YAAY,OAAO,EAAE,cAAc,YAAY;IACtG,MAAM,SAAS,MAAM,EAAE,UAAU;KAChC;KACA;KACA;KACA;KACA;IACD,CAAC;IACD,IAAI,QAAQ,IAAI,kBAAkB,SAAS,UAAU;SAChD,IAAI,kBAAkB,UAAU;KACpC,WAAW;KACX;IACD,OAAO,MAAM,IAAI,MAAM,+EAA+E;GACvG;EACD;EACA,IAAI,CAAC,UAAU;GACd,IAAI;IACH,WAAW,MAAM,MAAM,SAAS,cAAc;GAC/C,SAAS,QAAQ;IAChB,IAAI,uBAAuB;IAC3B,IAAI,iBAAiB,QAAQ,KAAK,IAAI,IAAI,iBAAiB,SAAS,GAAG,KAAK,GAAG,KAAK;KACnF,MAAM,IAAI,iBAAiB;KAC3B,IAAI,KAAK,OAAO,MAAM,YAAY,OAAO,EAAE,YAAY,YAAY;MAClE,MAAM,SAAS,MAAM,EAAE,QAAQ;OAC9B;OACA,OAAO;OACP;OACA;OACA;OACA;MACD,CAAC;MACD,IAAI,QAAQ;OACX,IAAI,kBAAkB,UAAU;QAC/B,uBAAuB,KAAK;QAC5B,WAAW;QACX;OACD;OACA,IAAI,kBAAkB,OAAO;QAC5B,uBAAuB;QACvB;OACD;OACA,MAAM,IAAI,MAAM,0DAA0D;MAC3E;KACD;IACD;IACA,IAAI,sBAAsB,MAAM;GACjC;GACA,IAAI,iBAAiB,QAAQ,KAAK,IAAI,IAAI,iBAAiB,SAAS,GAAG,KAAK,GAAG,KAAK;IACnF,MAAM,IAAI,iBAAiB;IAC3B,IAAI,KAAK,OAAO,MAAM,YAAY,OAAO,EAAE,eAAe,YAAY;KACrE,MAAM,SAAS,MAAM,EAAE,WAAW;MACjC;MACA;MACA;MACA;MACA;MACA;KACD,CAAC;KACD,IAAI,QAAQ;MACX,IAAI,EAAE,kBAAkB,WAAW,MAAM,IAAI,MAAM,oEAAoE;MACvH,WAAW;KACZ;IACD;GACD;EACD;EACA,MAAM,gBAAgB,SAAS,QAAQ,IAAI,gBAAgB;EAC3D,IAAI,SAAS,WAAW,OAAO,QAAQ,WAAW,UAAU,kBAAkB,OAAO,CAAC,SAAS,QAAQ,IAAI,mBAAmB,CAAC,EAAE,SAAS,SAAS,GAAG,OAAO,SAAS,KAAK;GAC1K,MAAM,KAAK;GACX;EACD,IAAI;GACH,OAAO,KAAK;GACZ;EACD;EACA,IAAI,SAAS,IAAI;GAChB,MAAM,kBAAkB,YAAY;IACnC,IAAI,YAAY,UAAU,OAAO,SAAS;IAC1C,IAAI,YAAY,UAAU,CAAC,eAAe;KACzC,MAAM,MAAM,MAAM,SAAS,KAAK;KAChC,OAAO,MAAM,KAAK,MAAM,GAAG,IAAI,KAAK;IACrC;IACA,OAAO,MAAM,SAAS,QAAQ,CAAC;GAChC;GACA,OAAO;IACN,MAAM,MAAM,gBAAgB;IAC5B;GACD;EACD;EACA,IAAI,QAAQ,MAAM,SAAS,KAAK;EAChC,IAAI;GACH,QAAQ,KAAK,MAAM,KAAK;EACzB,QAAQ,CAAC;EACT,OAAO;GACN;GACA;EACD;CACD;CACA,OAAO;EACN,QAAQ,QAAQ,KAAK,MAAM;GAC1B,OAAO,UAAU,KAAK;IACrB,GAAG;IACH,QAAQ,OAAO,YAAY;GAC5B,CAAC;EACF;;EAEA,IAAI,KAAK,MAAM;GACd,OAAO,UAAU,KAAK;IACrB,GAAG;IACH,QAAQ;GACT,CAAC;EACF;;EAEA,IAAI,KAAK,MAAM;GACd,OAAO,UAAU,KAAK;IACrB,GAAG;IACH,QAAQ;GACT,CAAC;EACF;;EAEA,KAAK,KAAK,MAAM;GACf,OAAO,UAAU,KAAK;IACrB,GAAG;IACH,QAAQ;GACT,CAAC;EACF;;EAEA,OAAO,KAAK,MAAM;GACjB,OAAO,UAAU,KAAK;IACrB,GAAG;IACH,QAAQ;GACT,CAAC;EACF;;EAEA,QAAQ,KAAK,MAAM;GAClB,OAAO,UAAU,KAAK;IACrB,GAAG;IACH,QAAQ;GACT,CAAC;EACF;;EAEA,KAAK,KAAK,MAAM;GACf,OAAO,UAAU,KAAK;IACrB,GAAG;IACH,QAAQ;GACT,CAAC;EACF;;EAEA,MAAM,KAAK,MAAM;GAChB,OAAO,UAAU,KAAK;IACrB,GAAG;IACH,QAAQ;GACT,CAAC;EACF;;EAEA,MAAM,KAAK,MAAM;GAChB,OAAO,UAAU,KAAK;IACrB,GAAG;IACH,QAAQ;GACT,CAAC;EACF;;EAEA,IAAI,GAAG,YAAY;GAClB,KAAK,MAAM,KAAK,YAAY;IAC3B,IAAI,CAAC,GAAG;IACR,IAAI,OAAO,MAAM,YAAY,EAAE,eAAe,KAAK,gBAAgB,KAAK,aAAa,IAAI,MAAM,IAAI,MAAM,sFAAsF;IAC/L,kBAAkB,KAAK,CAAC;GACzB;EACD;;EAEA,MAAM,GAAG,YAAY;GACpB,KAAK,MAAM,KAAK,YAAY;IAC3B,MAAM,IAAI,kBAAkB,QAAQ,CAAC;IACrC,IAAI,MAAM,IAAI,kBAAkB,OAAO,GAAG,CAAC;GAC5C;EACD;CACD;AACD;AAqDA,SAAS,wBAAwB,MAAM,OAAO,SAAS;CACtD,IAAI,UAAU,KAAK,KAAK,UAAU,MAAM,OAAO;CAC/C,IAAI,OAAO,UAAU,UAAU,MAAM,IAAI,MAAM,sGAAsG;CACrJ,OAAO,GAAG,KAAK,GAAG,SAAS,kBAAkB,OAAO,QAAQ,mBAAmB,KAAK;AACrF;AACA,SAAS,qBAAqB,MAAM,OAAO,SAAS;CACnD,IAAI,CAAC,SAAS,OAAO,UAAU,UAAU,OAAO;CAChD,MAAM,SAAS,CAAC;CAChB,MAAM,SAAS;EACd,QAAQ;EACR,OAAO;EACP,QAAQ;CACT,EAAE,QAAQ,UAAU;CACpB,IAAI,QAAQ,UAAU,gBAAgB,QAAQ,YAAY,OAAO;EAChE,KAAK,MAAM,KAAK,OAAO,OAAO,KAAK,GAAG,QAAQ,kBAAkB,OAAO,MAAM,KAAK,mBAAmB,MAAM,EAAE,CAAC;EAC9G,MAAM,SAAS,OAAO,KAAK,GAAG;EAC9B,QAAQ,QAAQ,OAAhB;GACC,KAAK,QAAQ,OAAO,GAAG,KAAK,GAAG;GAC/B,KAAK,SAAS,OAAO,IAAI;GACzB,KAAK,UAAU,OAAO,IAAI,KAAK,GAAG;GAClC,SAAS,OAAO;EACjB;CACD;CACA,KAAK,MAAM,KAAK,OAAO;EACtB,MAAM,YAAY,QAAQ,UAAU,eAAe,GAAG,KAAK,GAAG,EAAE,KAAK;EACrE,OAAO,KAAK,wBAAwB,WAAW,MAAM,IAAI,OAAO,CAAC;CAClE;CACA,MAAM,QAAQ,OAAO,KAAK,MAAM;CAChC,OAAO,QAAQ,UAAU,WAAW,QAAQ,UAAU,WAAW,GAAG,SAAS,UAAU;AACxF;AACA,SAAS,oBAAoB,MAAM,OAAO,SAAS;CAClD,IAAI,CAAC,MAAM,QAAQ,KAAK,GAAG,OAAO;CAClC,IAAI,QAAQ,YAAY,OAAO;EAC9B,MAAM,UAAU;GACf,MAAM;GACN,gBAAgB;GAChB,eAAe;EAChB,EAAE,QAAQ,UAAU;EACpB,MAAM,SAAS,QAAQ,kBAAkB,OAAO,QAAQ,MAAM,KAAK,MAAM,mBAAmB,CAAC,CAAC,EAAC,CAAE,KAAK,OAAO;EAC7G,QAAQ,QAAQ,OAAhB;GACC,KAAK,UAAU,OAAO;GACtB,KAAK,SAAS,OAAO,IAAI;GACzB,KAAK,UAAU,OAAO,IAAI,KAAK,GAAG;GAClC,SAAS,OAAO,GAAG,KAAK,GAAG;EAC5B;CACD;CACA,MAAM,SAAS;EACd,QAAQ;EACR,OAAO;EACP,QAAQ;CACT,EAAE,QAAQ,UAAU;CACpB,MAAM,SAAS,CAAC;CAChB,KAAK,MAAM,KAAK,OAAO,IAAI,QAAQ,UAAU,YAAY,QAAQ,UAAU,SAAS,OAAO,KAAK,QAAQ,kBAAkB,OAAO,IAAI,mBAAmB,CAAC,CAAC;MACrJ,OAAO,KAAK,wBAAwB,MAAM,GAAG,OAAO,CAAC;CAC1D,OAAO,QAAQ,UAAU,WAAW,QAAQ,UAAU,WAAW,GAAG,SAAS,OAAO,KAAK,MAAM,MAAM,OAAO,KAAK,MAAM;AACxH;AACA,SAAS,sBAAsB,SAAS;CACvC,OAAO,SAAS,gBAAgB,aAAa;EAC5C,MAAM,SAAS,CAAC;EAChB,IAAI,eAAe,OAAO,gBAAgB,UAAU,KAAK,MAAM,QAAQ,aAAa;GACnF,MAAM,QAAQ,YAAY;GAC1B,IAAI,UAAU,KAAK,KAAK,UAAU,MAAM;GACxC,IAAI,MAAM,QAAQ,KAAK,GAAG;IACzB,IAAI,MAAM,WAAW,GAAG;IACxB,OAAO,KAAK,oBAAoB,MAAM,OAAO;KAC5C,OAAO;KACP,SAAS;KACT,GAAG,SAAS;KACZ,eAAe,SAAS,iBAAiB;IAC1C,CAAC,CAAC;IACF;GACD;GACA,IAAI,OAAO,UAAU,UAAU;IAC9B,OAAO,KAAK,qBAAqB,MAAM,OAAO;KAC7C,OAAO;KACP,SAAS;KACT,GAAG,SAAS;KACZ,eAAe,SAAS,iBAAiB;IAC1C,CAAC,CAAC;IACF;GACD;GACA,OAAO,KAAK,wBAAwB,MAAM,OAAO,OAAO,CAAC;EAC1D;EACA,OAAO,OAAO,KAAK,GAAG;CACvB;AACD;AACA,SAAS,sBAAsB,UAAU,YAAY;CACpD,IAAI,UAAU;CACd,KAAK,MAAM,SAAS,SAAS,MAAM,aAAa,KAAK,CAAC,GAAG;EACxD,IAAI,OAAO,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC;EAC9C,IAAI,UAAU;EACd,IAAI,QAAQ;EACZ,IAAI,KAAK,SAAS,GAAG,GAAG;GACvB,UAAU;GACV,OAAO,KAAK,UAAU,GAAG,KAAK,SAAS,CAAC;EACzC;EACA,IAAI,KAAK,WAAW,GAAG,GAAG;GACzB,QAAQ;GACR,OAAO,KAAK,UAAU,CAAC;EACxB,OAAO,IAAI,KAAK,WAAW,GAAG,GAAG;GAChC,QAAQ;GACR,OAAO,KAAK,UAAU,CAAC;EACxB;EACA,IAAI,CAAC,cAAc,WAAW,UAAU,KAAK,KAAK,WAAW,UAAU,MAAM;EAC7E,MAAM,QAAQ,WAAW;EACzB,IAAI,MAAM,QAAQ,KAAK,GAAG;GACzB,UAAU,QAAQ,QAAQ,OAAO,oBAAoB,MAAM,OAAO;IACjE;IACA;GACD,CAAC,CAAC;GACF;EACD;EACA,IAAI,OAAO,UAAU,UAAU;GAC9B,UAAU,QAAQ,QAAQ,OAAO,qBAAqB,MAAM,OAAO;IAClE;IACA;GACD,CAAC,CAAC;GACF;EACD;EACA,IAAI,UAAU,UAAU;GACvB,UAAU,QAAQ,QAAQ,OAAO,IAAI,wBAAwB,MAAM,KAAK,GAAG;GAC3E;EACD;EACA,UAAU,QAAQ,QAAQ,OAAO,UAAU,UAAU,IAAI,mBAAmB,KAAK,MAAM,mBAAmB,KAAK,CAAC;CACjH;CACA,OAAO;AACR;AACA,SAAS,sBAAsB,MAAM,SAAS;CAC7C,IAAI,gBAAgB,UAAU,OAAO;CACrC,IAAI,SACH;OAAK,QAAQ,eAAe,WAAW,QAAQ,IAAI,cAAc,KAAK,QAAQ,IAAI,cAAc,IAAI,QAAQ,mBAAmB,QAAQ,qBAAqB,qCAAqC,OAAO,IAAI,gBAAgB,IAAI,CAAC,CAAC,SAAS;CAAC;CAE7O,OAAO,KAAK,UAAU,IAAI;AAC3B;AACA,SAAS,eAAe,UAAU,SAAS;CAC1C,IAAI,WAAW,GAAG,QAAQ,UAAU;CACpC,IAAI,QAAQ,QAAQ,MAAM,WAAW,QAAQ,eAAe,UAAU,QAAQ,OAAO,IAAI;CACzF,IAAI,SAAS,QAAQ,gBAAgB,QAAQ,OAAO,SAAS,CAAC,CAAC;CAC/D,IAAI,OAAO,WAAW,GAAG,GAAG,SAAS,OAAO,UAAU,CAAC;CACvD,IAAI,QAAQ,YAAY,IAAI;CAC5B,OAAO;AACR;AACA,SAAS,aAAa,GAAG,YAAY;CACpC,MAAM,eAAe,IAAI,QAAQ;CACjC,KAAK,MAAM,KAAK,YAAY;EAC3B,IAAI,CAAC,KAAK,OAAO,MAAM,UAAU;EACjC,MAAM,WAAW,aAAa,UAAU,EAAE,QAAQ,IAAI,OAAO,QAAQ,CAAC;EACtE,KAAK,MAAM,CAAC,GAAG,MAAM,UAAU,IAAI,MAAM,MAAM,aAAa,OAAO,CAAC;OAC/D,IAAI,MAAM,QAAQ,CAAC,GAAG,KAAK,MAAM,MAAM,GAAG,aAAa,OAAO,GAAG,EAAE;OACnE,IAAI,MAAM,KAAK,GAAG,aAAa,IAAI,GAAG,CAAC;CAC7C;CACA,OAAO;AACR;AACA,SAAS,oBAAoB,KAAK;CACjC,IAAI,IAAI,SAAS,GAAG,GAAG,OAAO,IAAI,UAAU,GAAG,IAAI,SAAS,CAAC;CAC7D,OAAO;AACR;AAIA,SAAS,qBAAqB,QAAQ;CACrC,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,WAAW,QAAQ,MAAM,IAAI,MAAM,GAAG,OAAO,2BAA2B;AAC7F;;;;ACxbA,SAAS,2BAA2B,EAAE,eAAe,IAAI,OAAO,WAAW;CAC1E,IAAI,cAAc,qBAAqB,YAAY;CACnD,OAAO,aAAa;EACnB,SAAS,GAAG,aAAa;EACzB;EACA;CACD,CAAC;AACF;;;;ACHA,SAAgB,0BAA0B,QAInB;CACrB,MAAM,YAAY,eAAe,OAAO,aAAa,OAAO,SAAS;CACrE,OAAO,2BAA2B;EAChC,cAAc,OAAO;EACrB,OAAO;CACT,CAAC;AACH;AAEA,SAAS,eACP,aACA,WACc;CACd,IAAI,YAAY,SAAS,WAAW;EAClC,MAAM,EAAE,WAAW;EACnB,OAAO,OAAO,OAAO,SAAS;GAC5B,MAAM,UAAU,IAAI,QAAQ,OAAO,IAAI;GACvC,QAAQ,QAAQ,IAAI,aAAa,MAAM;GACvC,OAAO,WAAW,MAAM,OAAO;EACjC;CACF;CAEA,MAAM,EAAE,cAAc;CACtB,OAAO,OAAO,OAAO,SAAS;EAC5B,MAAM,QAAQ,MAAM,UAAU,oBAAoB,SAAS;EAC3D,IAAI,OAAO,UAAU,KAAK,GAAG,OAAO,qBAAqB;EAEzD,MAAM,UAAU,IAAI,QAAQ,OAAO,IAAI;EAEvC,MAAM,eAAe,QAAQ,MAAM;EACnC,QAAQ,QAAQ,IAAI,iBAAiB,UAAU,MAAM,OAAO;EAE5D,MAAM,QAAQ,MAAM,WAAW,MAAM,OAAO;EAC5C,IAAI,MAAM,WAAW,KAAK,OAAO;EAEjC,MAAM,YAAY,MAAM,UAAU,aAAa,SAAS;EACxD,IAAI,OAAO,UAAU,SAAS,GAAG,OAAO;EAExC,aAAa,QAAQ,IAAI,iBAAiB,UAAU,UAAU,OAAO;EACrE,OAAO,WAAW,MAAM,YAAY;CACtC;AACF;AAGA,SAAS,uBAAiC;CACxC,OAAO,IAAI,SACT,KAAK,UAAU;EACb,MAAM;EACN,OAAO;EACP,QAAQ;CACV,CAAC,GACD;EAAE,QAAQ;EAAK,SAAS,EAAE,gBAAgB,mBAAmB;CAAE,CACjE;AACF;;;;ACjDA,MAAM,gBAAgB,EAAE,OAAO;CAC7B,MAAM,EAAE,OAAO;CACf,OAAO,EAAE,OAAO;CAChB,QAAQ,EAAE,OAAO;CACjB,QAAQ,EAAE,SACR,EAAE,MACA,EAAE,MAAM,CACN,EAAE,OAAO,GACT,EAAE,OAAO;EAAE,OAAO,EAAE,OAAO;EAAG,SAAS,EAAE,OAAO;CAAE,CAAC,CACrD,CAAC,CACH,CACF;AACF,CAAC;AASD,SAAS,UACP,QAC8D;CAC9D,OAAO,OAAO,SAAS,MAAM,OAAO,UAAU;AAChD;AAIA,SAAgB,SACd,QAC4B;CAC5B,IAAI,OAAO,SAAS,UAAU,KAC5B,MAAM,IAAI,MAAM,yBAAyB,OAAO,SAAS,QAAQ;CAGnE,IAAI,CAAC,UAAU,MAAM,GACnB,OAAO,gBAAgB,OAAO,OAAO,OAAO,QAAQ;CAItD,OAAO;EAAE,MAAM;EAAW,OAAO,OAAO;CAAK;AAC/C;AAEA,SAAS,gBACP,OACA,UACgC;CAChC,MAAM,UAAU,EAAE,UAAU,eAAe,KAAK;CAChD,IAAI,CAAC,QAAQ,SACX,MAAM,IAAI,MAAM,mCAAmC,SAAS,OAAO,EAAE;CAGvE,MAAM,WAAW,WAAW,QAAQ,MAAM;CAC1C,IAAI,aAAa,QACf,MAAM,IAAI,MAAM,6BAA6B,QAAQ,OAAO,MAAM;CAEpE,OAAO,OAAO,KAAK,QAAQ;AAC7B;AAEA,SAAS,WACP,SACsB;CACtB,QAAQ,QAAQ,MAAhB;EACE,KAAK,eACH,OAAO;GACL,MAAM;GACN,QAAQ,QAAQ;GAChB,QAAQ,aAAa,QAAQ,MAAM;EACrC;EACF,KAAK,gBACH,OAAO;GAAE,MAAM;GAAgB,QAAQ,QAAQ;EAAO;EACxD,KAAK,aACH,OAAO;GAAE,MAAM;GAAa,QAAQ,QAAQ;EAAO;EACrD,KAAK,aACH,OAAO;GAAE,MAAM;GAAa,QAAQ,QAAQ;EAAO;EACrD,KAAK,YACH,OAAO;GAAE,MAAM;GAAY,QAAQ,QAAQ;EAAO;EACpD,SACE;CACJ;AACF;AAEA,SAAS,aACP,QACsC;CACtC,IAAI,WAAW,QAAW,OAAO,CAAC;CAClC,OAAO,OAAO,QACX,UACC,OAAO,UAAU,QACrB;AACF;;;;ACjGA,eAAsB,mBACpB,QACkD;CAClD,OAAO,SAAS,MAAM,OAAO,IAAI,gBAAgB,CAAC;AACpD;AAOA,eAAsB,sBACpB,QACA,MACkE;CAClE,MAAM,gBAAgB,MAAM,mBAAmB,MAAM;CACrD,IAAI,OAAO,UAAU,aAAa,GAAG,OAAO;CAE5C,MAAM,UAAU,cAAc,MAAM,MAAM,QAAQ,IAAI,SAAS,IAAI;CACnE,IAAI,YAAY,QACd,OAAO,OAAO,KAAK;EAAE,MAAM;EAA0B;CAAK,CAAC;CAE7D,OAAO,OAAO,QAAQ,QAAQ,EAAE;AAClC;;;;AC5BA,MAAM,QAAQ;AAGd,SAAgB,kBAAkB,SAA0B;CAC1D,OAAO,QACJ,MAAM,OAAO,CAAC,CACd,KAAK,SAAS,KAAK,KAAK,CAAC,CAAC,CAC1B,MAAM,SAAS,SAAS,YAAY,SAAS,SAAS;AAC3D;AAEA,SAAS,kBAAkB,OAAyC;CAClE,IAAI,MAAM,SAAS,UAAU,OAAO;CACpC,MAAM;AACR;AAEA,eAAsB,uBAAuB,KAA+B;CAC1E,MAAM,WAAW,MAAM,SAAS,KAAK,KAAK,KAAK,YAAY,GAAG,OAAO,CAAC,CAAC,MACrE,iBACF;CACA,OAAO,aAAa,UAAa,kBAAkB,QAAQ;AAC7D;AAEA,eAAsB,qBAAqB,KAA4B;CACrE,MAAM,OAAO,KAAK,KAAK,KAAK,YAAY;CACxC,MAAM,WAAW,MAAM,SAAS,MAAM,OAAO,CAAC,CAAC,MAAM,iBAAiB;CAKtE,MAAM,UAAU,MAAM,GAHpB,YAAY,QAAQ,aAAa,MAAM,SAAS,SAAS,IAAI,IACxD,YAAY,KACb,WAAW,OACiB,MAAM,KAAK,OAAO;AACtD;;;;AC9BA,eAAsB,QACpB,SACA,UAAU,OACQ;CAElB,OAAO,MADc,OAAO,OAAO,SAAS;EAAE,MAAM;EAAW;CAAQ,CAAC,MACtD;AACpB;AAEA,eAAsB,WAAW,SAA8C;CAC7E,MAAM,SAAS,MAAM,OAAO,OAAO,SAAS,EAAE,MAAM,OAAO,CAAC;CAC5D,OAAO,OAAO,WAAW,WAAW,SAAS;AAC/C;AAGA,eAAsB,OACpB,SACA,SAC6B;CAC7B,MAAM,SAAS,MAAM,OAAO,OAAO,SAAS;EAC1C,MAAM;EACN;EACA,QAAQ;CACV,CAAC;CACD,OAAO,OAAO,WAAW,WAAW,SAAS;AAC/C;;;;ACtBA,SAAgB,gBACd,OACsC;CACtC,QAAQ,MAAM,MAAd;EACE,KAAK,eAAe;GAClB,MAAM,aAAa,MAAM,OAAO,KAC7B,UAAU,SAAS,MAAM,MAAM,IAAI,MAAM,SAC5C;GACA,OAAO,OAAO,KAAK,EAAE,SAAS,GAAG,MAAM,SAAS,WAAW,KAAK,EAAE,IAAI,CAAC;EACzE;EACA,KAAK,gBACH,OAAO,OAAO,KAAK,EACjB,SAAS,mBAAmB,MAAM,OAAO,oDAC3C,CAAC;EACH,KAAK,aAEH,OAAO,OAAO,KAAK,EAAE,SAAS,cAAc,MAAM,SAAS,CAAC;EAC9D,KAAK,aACH,OAAO,OAAO,KAAK,EAAE,SAAS,cAAc,MAAM,SAAS,CAAC;EAC9D,KAAK,YACH,OAAO,OAAO,KAAK,EAAE,SAAS,aAAa,MAAM,SAAS,CAAC;CAC/D;AACF;;;;ACgBA,eAAsB,YACpB,KACA,SACwD;CAGxD,MAAM,UAAU,MAAM,qBAAqB,QAAQ,GAAG;CAGtD,MAAM,WAAW,MAAM,kBAAkB,OAAO;CAChD,IAAI,aAAa,QAEf;MAAI,CAAC,MADmB,QAAQ,QAAQ,iBAAiB,QAAQ,GAE/D,OAAO,OAAO,QAAQ,EAAE,QAAQ,MAAM,CAAC;CACzC;CAGF,MAAM,gBAAgB,MAAM,mBAAmB,IAAI,MAAM;CACzD,IAAI,OAAO,UAAU,aAAa,GAChC,OAAO,gBAAgB,cAAc,KAAK;CAE5C,IAAI,cAAc,MAAM,WAAW,GACjC,OAAO,OAAO,KAAK,EAAE,SAAS,yCAAyC,CAAC;CAG1E,MAAM,eAAe,MAAM,QAAQ,QAAQ,mBACzC,cAAc,KAChB;CACA,IAAI,iBAAiB,QACnB,OAAO,OAAO,QAAQ,EAAE,QAAQ,MAAM,CAAC;CAGzC,MAAM,WAAW,SACf,MAAM,IAAI,OAAO,IAAI,aAAa,EAChC,QAAQ,EAAE,OAAO,EAAE,gBAAgB,aAAa,GAAG,EAAE,EACvD,CAAC,CACH;CACA,IAAI,OAAO,UAAU,QAAQ,GAAG,OAAO,gBAAgB,SAAS,KAAK;CACrE,IAAI,SAAS,MAAM,WAAW,GAC5B,OAAO,OAAO,KAAK,EACjB,SAAS,iBAAiB,aAAa,KAAK,oBAC9C,CAAC;CAGH,MAAM,UAAU,MAAM,QAAQ,QAAQ,cAAc,SAAS,KAAK;CAClE,IAAI,YAAY,QACd,OAAO,OAAO,QAAQ,EAAE,QAAQ,MAAM,CAAC;CAGzC,MAAM,OAAO,MAAM,iBAAiB,SAAS;EAC3C,aAAa,QAAQ;EACrB,kBAAkB,aAAa;CACjC,CAAC;CAED,MAAM,gBAAgB,MAAM,gBAC1B,SACA,QAAQ,QAAQ,gBAClB;CAEA,OAAO,OAAO,QAAQ;EACpB,QAAQ;EACR,aAAa,QAAQ;EACrB,kBAAkB,aAAa;EAC/B;EACA;CACF,CAAC;AACH;AAIA,eAAe,gBACb,SACA,kBACiB;CACjB,IAAI,MAAM,uBAAuB,OAAO,GAAG,OAAO;CAGlD,IAAI,CAAC,MADkB,iBAAiB,GAEtC,OAAO;CAET,MAAM,qBAAqB,OAAO;CAClC,OAAO;AACT;AAEA,eAAe,qBACb,OACA,SACA,OACA,OACwB;CACxB,MAAM,WAAW,MAAM,OACrB,SACA,MAAM,KAAK,UAAU;EAAE,OAAO,MAAM,IAAI;EAAG,OAAO,MAAM,IAAI;CAAE,EAAE,CAClE;CACA,IAAI,aAAa,QAAW,OAAO;CACnC,OAAO,MAAM,MAAM,SAAS,MAAM,IAAI,MAAM,QAAQ;AACtD;AAEA,SAAgB,qBAAkC;CAChD,OAAO;EACL,mBAAmB,aACjB,QACE,wCAAwC,SAAS,YAAY,gBAC7D,KACF;EACF,qBAAqB,kBACnB,qBACE,eACA,4BACC,iBAAiB,GAAG,aAAa,YAAY,IAAI,aAAa,KAAK,KACnE,iBAAiB,aAAa,IACjC;EACF,gBAAgB,aACd,qBACE,UACA,sBACC,YAAY,GAAG,QAAQ,YAAY,IAAI,QAAQ,KAAK,KACpD,YAAY,QAAQ,IACvB;EACF,wBAAwB,QAAQ,8BAA8B,IAAI;CACpE;AACF;;;;ACvHA,eAAe,YACb,SACsD;CACtD,MAAM,MAAM,WAAW,QAAQ,SAAS;CACxC,IAAI,OAAO,UAAU,GAAG,GACtB,OAAO,OAAO,KAAK,EACjB,SAAS,wDACX,CAAC;CAGH,MAAM,QAAQ,QAAQ,SAAS,IAAI,eAAe;CAClD,MAAM,YAAY,IAAI,eAAe,KAAK;CAE1C,MAAM,cAAc,MAAM,mBAAmB;EAC3C;EACA,WAAW,IAAI,MAAM;EACrB,QAAQ,IAAI,MAAM;CACpB,CAAC;CACD,IAAI,OAAO,UAAU,WAAW,GAC9B,OAAO,OAAO,KAAK,EACjB,SACE,mEACJ,CAAC;CAIH,IAAI,YAAY,MAAM,SAAS,UAAU;EACvC,MAAM,QAAQ,MAAM,UAAU,oBAAoB,IAAI,MAAM,SAAS;EACrE,IAAI,OAAO,UAAU,KAAK,GACxB,OAAO,OAAO,KAAK,EACjB,SACE,oFACJ,CAAC;CAEL;CAEA,MAAM,SAAS,0BAA0B;EACvC,SAAS,IAAI,MAAM;EACnB,aAAa,YAAY;EACzB;CACF,CAAC;CAED,OAAO,OAAO,QAAQ;EACpB,SAAS;GAAE,SAAS,IAAI,MAAM;GAAS;EAAO;EAC9C,KAAK,IAAI;CACX,CAAC;AACH;AAGA,eAAsB,YACpB,SACA,UAAsB,CAAC,GAC4C;CACnE,MAAM,OAAO,MAAM,YAAY,OAAO;CACtC,IAAI,OAAO,UAAU,IAAI,GAAG,OAAO;CACnC,OAAO,QAAQ,KAAK,MAAM,OAAO;AACnC;AAIA,eAAsB,eACpB,MACA,SACA,UAAsB,CAAC,GAC4C;CACnE,MAAM,OAAO,MAAM,YAAY,OAAO;CACtC,IAAI,OAAO,UAAU,IAAI,GAAG,OAAO;CAInC,MAAM,UAAU,MAAM,mBAAmB;EACvC,MAFA,OAAO,KAAK,YAAY,WAAW,KAAK,UAAU;EAGlD,KAAK,KAAK,MAAM,IAAI;EACpB,KAAK,QAAQ;CACf,CAAC;CACD,IAAI,OAAO,UAAU,OAAO,GAAG;EAC7B,IAAI,QAAQ,MAAM,SAAS,sBAAsB;GAC/C,MAAM,SAAS,MAAM,mBAAmB,KAAK,MAAM,SAAS,OAAO;GACnE,IAAI,WAAW,QAAW;IACxB,IAAI,OAAO,UAAU,MAAM,GAAG,OAAO;IACrC,OAAO,QAAQ;KAAE,GAAG,KAAK,MAAM;KAAS,aAAa,OAAO;IAAM,CAAC;GACrE;EACF;EACA,OAAO,OAAO,KAAK,sBAAsB,QAAQ,KAAK,CAAC;CACzD;CAEA,OAAO,QAAQ;EAAE,GAAG,KAAK,MAAM;EAAS,aAAa,QAAQ;CAAM,CAAC;AACtE;AAIA,eAAe,mBACb,KACA,SAC4D;CAE5D,IAAI,EADU,QAAQ,SAAS,QAAQ,MAAM,UAAU,OAC3C,OAAO;CAEnB,OAAO,qEAAqE;CAC5E,MAAM,OAAO,MAAM,YAAY,KAAK;EAClC,KAAK,QAAQ,OAAO,QAAQ,IAAI;EAChC,SAAS,QAAQ,eAAe,mBAAmB;CACrD,CAAC;CACD,IAAI,OAAO,UAAU,IAAI,GAAG,OAAO;CACnC,IAAI,CAAC,KAAK,MAAM,QACd,OAAO,OAAO,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAC,CAAC;CAG1E,OACE,qBAAqB,KAAK,MAAM,YAAY,iBAAiB,KAAK,MAAM,iBAAiB,GAC3F;CACA,IAAI,KAAK,MAAM,kBAAkB,IAC/B,OAAO,KAAK,MAAM,aAAa;CAEjC,OAAO,OAAO,QAAQ,KAAK,MAAM,WAAW;AAC9C;AAEA,SAAS,sBACP,OAGgB;CAChB,QAAQ,MAAM,MAAd;EACE,KAAK,wBACH,OAAO,EAAE,SAAS,yBAAyB,MAAM,OAAO;EAC1D,KAAK,sBACH,OAAO,EACL,SACE,sFACJ;CACJ;AACF"}