@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-codegen-Ceeosw5x.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 を取得し、ローカル config と同じ valibot 検証を通して\n// codegen 入力(CommonOrizmConfig)に揃える。raw(JSON) を正本にすることで型キャストを避ける。\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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"}
@@ -0,0 +1,190 @@
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";
4
+ import { Result } from "@praha/byethrow";
5
+ import * as v from "valibot";
6
+ import { mkdir, writeFile } from "node:fs/promises";
7
+ import path from "node:path";
8
+ import * as prettier from "prettier/standalone";
9
+ import prettierPluginEstree from "prettier/plugins/estree.js";
10
+ import prettierPluginTypeScript from "prettier/plugins/typescript.js";
11
+ import { OrizmConfigDef } from "@orizm/common/config-validator";
12
+
13
+ //#region src/cli/codegen/format.ts
14
+ function formatTsWithPrettier(code) {
15
+ return prettier.format(code, {
16
+ parser: "typescript",
17
+ plugins: [prettierPluginEstree, prettierPluginTypeScript]
18
+ });
19
+ }
20
+
21
+ //#endregion
22
+ //#region src/cli/codegen/render.ts
23
+ const AUTOGEN_HEADER = "// This file was automatically generated and should not be edited.";
24
+ const UTILITIES = `// Utilities
25
+ type _ModuleRef<T> = T & _ModuleDescriptor;
26
+ type _ModuleDescriptor = {
27
+ isModule: true;
28
+ };
29
+ type _ArrayModuleRef<T> = T & _ArrayModuleDescriptor;
30
+ type _ArrayModuleDescriptor = {
31
+ isModuleArray: true;
32
+ };`;
33
+ function toCodeTypeName(str) {
34
+ return (str.charAt(0).toUpperCase() + str.slice(1)).replace(/_([a-z])/g, (g) => g[1].toUpperCase());
35
+ }
36
+ function typeName(column, moduleSuffix = "") {
37
+ switch (column.type) {
38
+ case "reference": return "string";
39
+ case "module": return toCodeTypeName(column.moduleName ?? "") + moduleSuffix;
40
+ case "module-array": return toCodeTypeName(column.moduleName ?? "") + moduleSuffix + "[]";
41
+ case "json": return "unknown";
42
+ case "storage": return "StorageItemType";
43
+ default: return column.type;
44
+ }
45
+ }
46
+ function nullableSuffix(column) {
47
+ return !column.required && column.type !== "module-array" ? " | null" : "";
48
+ }
49
+ function filterRefColumns(columns) {
50
+ return columns.filter((c) => c.type === "reference" && c.tableName !== void 0 && c.includeName !== void 0 && c.includeName !== "" || c.type === "module" && c.moduleName !== void 0 || c.type === "module-array" && c.moduleName !== void 0);
51
+ }
52
+ function getIncludeName(column) {
53
+ return column.type === "reference" ? column.includeName || column.name : column.name;
54
+ }
55
+ function getIncludeType(column) {
56
+ if (column.type === "reference" && column.tableName) return toCodeTypeName(column.tableName) + "__Descriptor";
57
+ if (column.type === "module" && column.moduleName) return `_ModuleRef<${toCodeTypeName(column.moduleName)}__Descriptor>`;
58
+ if (column.type === "module-array" && column.moduleName) return `_ArrayModuleRef<${toCodeTypeName(column.moduleName)}__Descriptor>`;
59
+ return "";
60
+ }
61
+ function renderColumnField(col, options) {
62
+ const optional = options?.optional === true ? "?" : "";
63
+ const suffix = options?.suffix ?? "";
64
+ return `${col.name}${optional}: ${typeName(col, suffix)}${nullableSuffix(col)};`;
65
+ }
66
+ function renderTypeBlock(name, fields) {
67
+ return `export type ${name} = {\n${fields.join("\n")}\n};`;
68
+ }
69
+ function renderRefsFieldLines(columns) {
70
+ const refCols = filterRefColumns(columns);
71
+ if (refCols.length === 0) return ["refs: object;"];
72
+ return [
73
+ "refs: {",
74
+ ...refCols.map((c) => `${getIncludeName(c)}: ${getIncludeType(c)};`),
75
+ "}"
76
+ ];
77
+ }
78
+ function renderUniqueFieldLines(table) {
79
+ const uniqueIndexes = (table.indexes ?? []).filter((i) => i.unique);
80
+ if (uniqueIndexes.length === 0) return ["unique: [];"];
81
+ return [
82
+ "unique: [",
83
+ ...uniqueIndexes.map((index) => {
84
+ return `{ ${index.columns.map((colName) => {
85
+ const col = table.columns.find((c) => c.name === colName);
86
+ if (!col) throw new Error(`column ${colName} not found`);
87
+ const nullable = !col.required && index.nullsNotDistinct ? " | null" : "";
88
+ return `${col.name}:${typeName(col)}${nullable},`;
89
+ }).join("")} },`;
90
+ }),
91
+ "]"
92
+ ];
93
+ }
94
+ function renderModuleRowTypeBlock(mod) {
95
+ return renderTypeBlock(toCodeTypeName(mod.name), ["id: string;", ...mod.columns.map((col) => renderColumnField(col))]);
96
+ }
97
+ function renderModuleDescriptorBlock(mod) {
98
+ const name = toCodeTypeName(mod.name);
99
+ return renderTypeBlock(`${name}__Descriptor`, [
100
+ `row: ${name};`,
101
+ ...renderRefsFieldLines(mod.columns),
102
+ "unique: [];"
103
+ ]);
104
+ }
105
+ function renderSection(title, blocks) {
106
+ if (blocks.length === 0) return "";
107
+ return `// ${title}\n${blocks.join("\n\n")}`;
108
+ }
109
+ function renderWebhookTypesSection(tables) {
110
+ const lines = [
111
+ "// Webhook types",
112
+ "export type WebhookEvent = \"content.create\" | \"content.update\" | \"content.delete\";",
113
+ "",
114
+ "type WebhookPayloadBase = {",
115
+ " event: WebhookEvent;",
116
+ " timestamp: string;",
117
+ " project: string;",
118
+ "};",
119
+ ""
120
+ ];
121
+ if (tables.length > 0) {
122
+ const unionMembers = tables.map((t) => {
123
+ const name = toCodeTypeName(t.name);
124
+ return `| {\n table: "${t.name}";\n content: ${name};\n old?: ${name};\n}`;
125
+ }).join("\n");
126
+ lines.push(`export type WebhookPayload = WebhookPayloadBase & (\n${unionMembers}\n);`);
127
+ } else lines.push("export type WebhookPayload = WebhookPayloadBase;");
128
+ return lines.join("\n");
129
+ }
130
+
131
+ //#endregion
132
+ //#region src/cli/codegen/write.ts
133
+ function resolveOutputFile(output) {
134
+ return output.endsWith(".ts") ? output : path.join(output, "index.ts");
135
+ }
136
+ async function writeGeneratedFile(output, content) {
137
+ const target = resolveOutputFile(output);
138
+ await mkdir(path.dirname(target), { recursive: true });
139
+ await writeFile(target, content, "utf-8");
140
+ return target;
141
+ }
142
+
143
+ //#endregion
144
+ //#region src/cli/codegen/pull.ts
145
+ async function pullCurrentDefinition(ctx) {
146
+ const definition = toResult(await ctx.client.GET("/projects/{projectName}/definitions/current", { params: { path: { projectName: ctx.projectName } } }));
147
+ if (Result.isFailure(definition)) return definition;
148
+ const parsed = v.safeParse(OrizmConfigDef, safeJsonParse(definition.value.raw));
149
+ if (!parsed.success) return Result.fail({
150
+ type: "definition_schema_violation",
151
+ issues: parsed.issues
152
+ });
153
+ return Result.succeed(parsed.output);
154
+ }
155
+ function safeJsonParse(raw) {
156
+ try {
157
+ return JSON.parse(raw);
158
+ } catch {
159
+ return;
160
+ }
161
+ }
162
+
163
+ //#endregion
164
+ //#region src/cli/commands/codegen/run-codegen.ts
165
+ async function runCodegen(params) {
166
+ if (params.pull) return runWithContext(params.args, async (ctx) => {
167
+ const pulled = await pullCurrentDefinition(ctx);
168
+ if (Result.isFailure(pulled)) return pullFailure(pulled.error);
169
+ return generate(pulled.value, params);
170
+ });
171
+ const loaded = await loadConfig(params.configFile);
172
+ if (Result.isFailure(loaded)) return configLoadFailure(loaded.error);
173
+ return generate(loaded.value, params);
174
+ }
175
+ async function generate(config, params) {
176
+ const content = await params.render(config);
177
+ const target = await writeGeneratedFile(params.output, content);
178
+ return Result.succeed({
179
+ json: { output: target },
180
+ text: () => `Generated ${params.label} types to ${target}`
181
+ });
182
+ }
183
+ function pullFailure(error) {
184
+ if (error.type === "definition_schema_violation") return Result.fail({ message: `The applied definition is invalid (${error.issues.length} problem(s)).\n${formatValibotIssues(error.issues, getOutputState().color)}` });
185
+ return apiErrorFailure(error);
186
+ }
187
+
188
+ //#endregion
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-codegen-DgaFaIQ1.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 を取得し、ローカル config と同じ valibot 検証を通して\n// codegen 入力(CommonOrizmConfig)に揃える。raw(JSON) を正本にすることで型キャストを避ける。\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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"}