better-supabase 0.7.1 → 0.8.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 (499) hide show
  1. package/README.md +6 -2
  2. package/dist/{access-sql-B0dF-SoF.js → access-sql-CrSbK1q-.js} +1 -1
  3. package/dist/{adapter-iKgjHVPx.js → adapter-CN45ibbV.js} +658 -157
  4. package/dist/{agents-CVHGd7It.d.ts → agents-BY_LQXtQ.d.ts} +4 -4
  5. package/dist/{ai-cache-CBWs1W0k.js → ai-cache-Dfgk8nBT.js} +2 -1
  6. package/dist/{ai-cache-DaDu_G5L.d.ts → ai-cache-DrUMMgp6.d.ts} +4 -4
  7. package/dist/{ai-chat-B24UI962.js → ai-chat-CVLRWbtS.js} +4 -3
  8. package/dist/{ai-chat-7amvXjmQ.d.ts → ai-chat-DXkMy74O.d.ts} +5 -5
  9. package/dist/{ai-files-CSPNswUY.js → ai-files-CioLu5du.js} +5 -4
  10. package/dist/ai-message-DfaP8sis.js +14 -0
  11. package/dist/ai-sdk/agents/index.d.ts +4 -4
  12. package/dist/ai-sdk/batches/index.d.ts +4 -4
  13. package/dist/ai-sdk/batches/index.js +4 -4
  14. package/dist/ai-sdk/cache/index.d.ts +2 -2
  15. package/dist/ai-sdk/cache/index.js +2 -2
  16. package/dist/ai-sdk/chat/index.d.ts +1 -1
  17. package/dist/ai-sdk/chat/index.js +8 -20
  18. package/dist/ai-sdk/embeddings/index.d.ts +2 -2
  19. package/dist/ai-sdk/files/index.d.ts +3 -3
  20. package/dist/ai-sdk/files/index.js +4 -4
  21. package/dist/ai-sdk/index.d.ts +37 -9
  22. package/dist/ai-sdk/index.js +3 -2
  23. package/dist/ai-sdk/mcp/index.d.ts +43 -6
  24. package/dist/ai-sdk/mcp/index.js +36 -7
  25. package/dist/ai-sdk/memory/index.d.ts +2 -2
  26. package/dist/ai-sdk/memory/index.js +1 -1
  27. package/dist/ai-sdk/workflow/index.d.ts +6 -6
  28. package/dist/ai-sdk/workflow/index.js +13 -24
  29. package/dist/{ai-tasks-Cd1HMFvB.d.ts → ai-tasks-BRQ6iQLc.d.ts} +4 -4
  30. package/dist/{announcements-ZRGnScWI.d.ts → announcements-Bouy0Ski.d.ts} +3 -3
  31. package/dist/{announcements-CiyOs-xP.js → announcements-p_BFofiR.js} +1 -1
  32. package/dist/api-Dnf2q-Ht.d.ts +370 -0
  33. package/dist/api-DtHFC037.js +676 -0
  34. package/dist/{api-keys-CIjghYjV.d.ts → api-keys-C8BlF3L2.d.ts} +4 -4
  35. package/dist/arazzo/index.d.ts +255 -0
  36. package/dist/arazzo/index.js +622 -0
  37. package/dist/{assistant-DwdpDH1q.d.ts → assistant-DBlFDZsi.d.ts} +5 -5
  38. package/dist/astro/index.d.ts +7 -7
  39. package/dist/astro/index.js +7 -7
  40. package/dist/asyncapi/index.d.ts +103 -0
  41. package/dist/asyncapi/index.js +569 -0
  42. package/dist/authorizer-ayxUDXXP.js +126 -0
  43. package/dist/authorizer-eiOjo-3l.d.ts +73 -0
  44. package/dist/better-result/index.d.ts +118 -0
  45. package/dist/better-result/index.js +64 -0
  46. package/dist/{bind-l4kAvYSv.js → bind-ButSzrHe.js} +1 -1
  47. package/dist/{bind-Bu_ZNa3W.d.ts → bind-CQ5mPyX1.d.ts} +3 -3
  48. package/dist/{block-events-CrT8r7Fe.js → block-events-DTxU5tfr.js} +18 -3
  49. package/dist/{block-fields-GFkxl4dP.js → block-fields-CroxUuF2.js} +3 -3
  50. package/dist/{block-fields-SJ6fEf3o.d.ts → block-fields-D1pfrcIY.d.ts} +2 -2
  51. package/dist/{block-helpers-CKtbFcRv.d.ts → block-helpers-C0Xj8War.d.ts} +2 -2
  52. package/dist/{block-helpers-DWHxHsEQ.js → block-helpers-Cy3pB96I.js} +41 -9
  53. package/dist/{block-hooks-BmjMyXTa.js → block-hooks-BPNMIlLl.js} +3 -3
  54. package/dist/{block-hooks-plbZ0AbJ.d.ts → block-hooks-DaOVC7SC.d.ts} +3 -3
  55. package/dist/{block-transport-BLr-ZgLc.js → block-transport-bAKh-dGc.js} +28 -2
  56. package/dist/{block-transport-DvaoPuZ9.d.ts → block-transport-inD4fFq-.d.ts} +24 -2
  57. package/dist/blocks/agents/index.d.ts +3 -3
  58. package/dist/blocks/agents/index.js +5 -4
  59. package/dist/blocks/ai-cache/index.d.ts +3 -3
  60. package/dist/blocks/ai-cache/index.js +3 -3
  61. package/dist/blocks/ai-chat/index.d.ts +9 -4
  62. package/dist/blocks/ai-chat/index.js +5 -5
  63. package/dist/blocks/ai-chat/react/index.d.ts +3 -3
  64. package/dist/blocks/ai-chat/react/index.js +5 -5
  65. package/dist/blocks/ai-files/index.d.ts +3 -3
  66. package/dist/blocks/ai-files/index.js +3 -3
  67. package/dist/blocks/ai-providers/index.d.ts +3 -3
  68. package/dist/blocks/ai-providers/index.js +8 -7
  69. package/dist/blocks/ai-tasks/index.d.ts +3 -3
  70. package/dist/blocks/ai-tasks/index.js +7 -6
  71. package/dist/blocks/announcements/index.d.ts +3 -3
  72. package/dist/blocks/announcements/index.js +3 -3
  73. package/dist/blocks/announcements/react/index.d.ts +3 -3
  74. package/dist/blocks/announcements/react/index.js +3 -3
  75. package/dist/blocks/api-keys/index.d.ts +5 -5
  76. package/dist/blocks/api-keys/index.js +8 -8
  77. package/dist/blocks/attachments/index.d.ts +12 -8
  78. package/dist/blocks/attachments/index.js +22 -13
  79. package/dist/blocks/audit/index.d.ts +21 -10
  80. package/dist/blocks/audit/index.js +30 -11
  81. package/dist/blocks/billing/index.d.ts +11 -9
  82. package/dist/blocks/billing/index.js +15 -15
  83. package/dist/blocks/comments/index.d.ts +8 -8
  84. package/dist/blocks/comments/index.js +8 -7
  85. package/dist/blocks/connectors/index.d.ts +3 -3
  86. package/dist/blocks/connectors/index.js +7 -6
  87. package/dist/blocks/data-lifecycle/index.d.ts +12 -8
  88. package/dist/blocks/data-lifecycle/index.js +13 -8
  89. package/dist/blocks/entitlements/index.d.ts +3 -3
  90. package/dist/blocks/entitlements/index.js +1 -1
  91. package/dist/blocks/flags/index.d.ts +4 -4
  92. package/dist/blocks/flags/index.js +4 -3
  93. package/dist/blocks/inbox/index.d.ts +3 -3
  94. package/dist/blocks/inbox/index.js +4 -5
  95. package/dist/blocks/inbox/react/index.d.ts +1 -1
  96. package/dist/blocks/inbox/react/index.js +1 -1
  97. package/dist/blocks/inbox/react/server.d.ts +1 -1
  98. package/dist/blocks/index.d.ts +10 -10
  99. package/dist/blocks/index.js +6 -6
  100. package/dist/blocks/jobs/index.d.ts +48 -32
  101. package/dist/blocks/jobs/index.js +44 -287
  102. package/dist/blocks/knowledge/index.d.ts +3 -3
  103. package/dist/blocks/knowledge/index.js +3 -3
  104. package/dist/blocks/memory/index.d.ts +4 -4
  105. package/dist/blocks/memory/index.js +7 -6
  106. package/dist/blocks/notifications/index.d.ts +11 -9
  107. package/dist/blocks/notifications/index.js +20 -25
  108. package/dist/blocks/notifications/react/index.d.ts +1 -1
  109. package/dist/blocks/notifications/react/index.js +1 -1
  110. package/dist/blocks/onboarding/index.d.ts +3 -3
  111. package/dist/blocks/onboarding/index.js +3 -3
  112. package/dist/blocks/onboarding/react/index.d.ts +2 -2
  113. package/dist/blocks/onboarding/react/index.js +2 -2
  114. package/dist/blocks/onboarding/react/server.d.ts +1 -1
  115. package/dist/blocks/organizations/index.d.ts +9 -9
  116. package/dist/blocks/organizations/index.js +11 -18
  117. package/dist/blocks/outbox/index.d.ts +2 -2
  118. package/dist/blocks/outbox/index.js +16 -25
  119. package/dist/blocks/profiles/index.d.ts +7 -7
  120. package/dist/blocks/profiles/index.js +7 -6
  121. package/dist/blocks/push/index.d.ts +4 -4
  122. package/dist/blocks/push/index.js +3 -3
  123. package/dist/blocks/settings/index.d.ts +4 -4
  124. package/dist/blocks/settings/index.js +7 -6
  125. package/dist/blocks/sso/index.d.ts +5 -5
  126. package/dist/blocks/sso/index.js +6 -5
  127. package/dist/blocks/usage/index.d.ts +3 -3
  128. package/dist/blocks/usage/index.js +5 -4
  129. package/dist/blocks/waitlist/index.d.ts +5 -5
  130. package/dist/blocks/waitlist/index.js +5 -4
  131. package/dist/blocks/webhooks/index.d.ts +22 -13
  132. package/dist/blocks/webhooks/index.js +41 -70
  133. package/dist/blocks/workflow-builder/index.d.ts +4 -4
  134. package/dist/blocks/workflow-builder/index.js +3 -3
  135. package/dist/blocks/workflow-builder/react/index.d.ts +4 -4
  136. package/dist/blocks/workflow-builder/react/index.js +4 -4
  137. package/dist/blocks/workflows/index.d.ts +3 -3
  138. package/dist/blocks/workflows/index.js +3 -3
  139. package/dist/blocks/workflows/react/index.d.ts +3 -3
  140. package/dist/blocks/workflows/react/index.js +3 -3
  141. package/dist/build-hPwk3_X5.js +1296 -0
  142. package/dist/{build-BXIzE6Xv.js → build-meLuYGri.js} +3 -3
  143. package/dist/casing-DdFWEtqr.js +16 -0
  144. package/dist/chat-sdk/index.d.ts +6 -6
  145. package/dist/chat-sdk/index.js +5 -4
  146. package/dist/chat-sdk/react/index.d.ts +1 -1
  147. package/dist/chat-sdk/react/server.d.ts +1 -1
  148. package/dist/{claims-DDBQT6BK.js → claims-0KZVT804.js} +1 -1
  149. package/dist/cli/add-1dc5wM5k.js +69 -0
  150. package/dist/cli/arazzo-1.0-BalU61-_.js +532 -0
  151. package/dist/cli/arazzo-1.1-Bnfasbun.js +705 -0
  152. package/dist/cli/asyncapi-3.0.0-C78dBjR6.js +5593 -0
  153. package/dist/cli/asyncapi-3.1.0-g-7aIfV1.js +5833 -0
  154. package/dist/cli/bin.js +4 -4
  155. package/dist/cli/cache-CIfA-jBV.js +483 -0
  156. package/dist/cli/{codemod-Bl_tQpHn.js → codemod-JVlTQQG2.js} +4 -4
  157. package/dist/cli/{command-CK14fP91.js → command-DV-StG1x.js} +5 -0
  158. package/dist/cli/{config-DU7EJImt.js → config-C2Pz2_4A.js} +7 -4
  159. package/dist/cli/config-DpbF8ML3.js +2 -0
  160. package/dist/cli/{config-NiPxAmUF.js → config-M-WzL9O2.js} +116 -18
  161. package/dist/cli/{db-DOBPt660.js → db-BkcfOlyB.js} +2 -1
  162. package/dist/cli/{diff-SjkO5rNr.js → diff-D1jGdb3Y.js} +1 -1
  163. package/dist/cli/{doctor-DJk0aeBi.js → doctor-VcDtuusV.js} +316 -221
  164. package/dist/cli/emit-BHHfwUoT.js +1136 -0
  165. package/dist/cli/{env-qXgyMV6r.js → env-B--LMhEe.js} +13 -10
  166. package/dist/cli/env-vzBG90Um.js +2 -0
  167. package/dist/cli/{env-CJLbUVPB.js → env-zHJtMIBo.js} +11 -3
  168. package/dist/cli/{errors-4v4DTtda.js → errors-CqTLXe2M.js} +18 -2
  169. package/dist/cli/{fastest-levenshtein-CFN-lNDv.js → fastest-levenshtein-CF7BCi9l.js} +1 -1
  170. package/dist/cli/files-BVupXPIC.js +34 -0
  171. package/dist/cli/gen-DmVj3u4L.js +322 -0
  172. package/dist/cli/{init-BHuEQrQK.js → glue-C1UE8gQN.js} +16 -313
  173. package/dist/cli/index.d.ts +59 -31
  174. package/dist/cli/index.js +8 -6
  175. package/dist/cli/init-CVZ3s5kl.js +258 -0
  176. package/dist/cli/{introspect-DzR2nyQb.js → introspect-BToGNfm-.js} +14 -14
  177. package/dist/cli/{io-DI1mTdSA.js → io-CFzJVJ68.js} +5 -1
  178. package/dist/cli/{keys-BGCnnb-s.js → keys-CJhtIxJ3.js} +4 -4
  179. package/dist/cli/metadata-DSRKCaf-.js +133 -0
  180. package/dist/cli/names-D6LrQnOv.js +6 -0
  181. package/dist/cli/openapi-3.0-t7xwkuRH.js +928 -0
  182. package/dist/cli/openapi-3.1-CVze7tBS.js +870 -0
  183. package/dist/cli/openapi-3.2-CFoMYM01.js +1031 -0
  184. package/dist/cli/{openapi-BlRJ18s3.js → openapi-DWa4Ir1q.js} +8 -14
  185. package/dist/cli/prompts-BdeVmVpg.js +2 -0
  186. package/dist/cli/{prompts-BNcNfAve.js → prompts-DZJB1nTw.js} +6 -6
  187. package/dist/cli/{rolldown-runtime-BPOCksWG.js → rolldown-runtime-CMFfr-1z.js} +3 -1
  188. package/dist/cli/run-DA6_lg3w.js +389 -0
  189. package/dist/cli/run-DuN1MX-7.js +705 -0
  190. package/dist/cli/scaffold-5DenHSxF.js +292 -0
  191. package/dist/cli/scaffold-CwQUMFRb.js +2 -0
  192. package/dist/cli/{seed-DQzqT7LP.js → seed-CzBmrGON.js} +14 -18
  193. package/dist/cli/seed-DOmit9Hq.js +2 -0
  194. package/dist/cli/{skills-QQs4q68J.js → skills-CnO8QFS7.js} +7 -6
  195. package/dist/cli/snapshot-Bstk6ulj.js +287 -0
  196. package/dist/cli/source-args-BYfq6imV.js +31 -0
  197. package/dist/cli/spec-CzosTYm3.js +7438 -0
  198. package/dist/cli/spec-T_0Bcyw7.js +2 -0
  199. package/dist/cli/{sql-B8csQPyn.js → sql-BKOOQAX3.js} +240 -218
  200. package/dist/cli/sql-DJrNDxQm.js +3 -0
  201. package/dist/cli/{style-C0NFdJRL.js → style-CB3vxgh0.js} +3 -3
  202. package/dist/cli/typegen-Demi5-VQ.js +486 -0
  203. package/dist/cli/validate-Ca13ktgz.js +7522 -0
  204. package/dist/cli/{version-59gcepIG.js → version-B4k0aUxS.js} +1 -1
  205. package/dist/client/index.d.ts +4 -3
  206. package/dist/client/index.js +60 -3
  207. package/dist/client/native/index.d.ts +3 -3
  208. package/dist/client/native/index.js +3 -3
  209. package/dist/{client-CI0Z2zWX.js → client-wxeTQFtB.js} +36 -3
  210. package/dist/{clone-BfgmLU90.js → clone-dN9XOL1K.js} +9 -1
  211. package/dist/{cloud-event-BnmD5fb9.js → cloud-event-CTh9Sr5w.js} +16 -2
  212. package/dist/{cloud-event-C1JCc1bH.d.ts → cloud-event-Dune0KI7.d.ts} +16 -2
  213. package/dist/{compiler-DY_wkj4R.d.ts → compiler-V1qvcST1.d.ts} +2 -2
  214. package/dist/{compose-BIBNgAnq.js → compose-BHej1acw.js} +3 -3
  215. package/dist/{composite--yqry7uW.d.ts → composite-CWAJTRBF.d.ts} +6 -6
  216. package/dist/{composite-DXVUibdi.js → composite-zTe0TCqj.js} +4 -4
  217. package/dist/config/index.d.ts +3 -4
  218. package/dist/config/index.js +4 -4
  219. package/dist/config-DlKvtt95.js +540 -0
  220. package/dist/{connector-Dv8kK0MO.d.ts → connector-CySQEFcW.d.ts} +1 -1
  221. package/dist/{connectors-CrpknU0P.d.ts → connectors--PGhmiu0.d.ts} +4 -4
  222. package/dist/{context-BCrWe7ow.d.ts → context-DsV2SueA.d.ts} +11 -2
  223. package/dist/context-nPDvQ-Zl.js +41 -0
  224. package/dist/credentials/index.d.ts +5 -5
  225. package/dist/credentials/index.js +9 -17
  226. package/dist/{cron-DVPUg5k3.js → cron-D25Ukpxy.js} +1 -1
  227. package/dist/cron-route-D2AN9SA1.js +24 -0
  228. package/dist/{csv-DCK-PT1n.js → csv-BZnHA1Py.js} +1 -1
  229. package/dist/{define-B-TVjC25.js → define-CFQcvM20.js} +263 -229
  230. package/dist/{define-CJJkkr1-.d.ts → define-DmcfoNXB.d.ts} +136 -111
  231. package/dist/edge/index.d.ts +66 -13
  232. package/dist/edge/index.js +65 -39
  233. package/dist/elysia/index.d.ts +1 -1
  234. package/dist/elysia/index.js +1 -1
  235. package/dist/{embeddings-C9KGQnXt.d.ts → embeddings-B4vhS-dY.d.ts} +1 -1
  236. package/dist/{ended-XjeGQ5XW.d.ts → ended-CcvcRqEd.d.ts} +7 -1
  237. package/dist/{entitlements-DRl6ZJUm.js → entitlements-BYFf0Cdh.js} +2 -2
  238. package/dist/{entitlements-BKSVGtrG.d.ts → entitlements-Ds8qoYZ-.d.ts} +1 -1
  239. package/dist/env/index.d.ts +1 -1
  240. package/dist/env/index.js +9 -2
  241. package/dist/{errors-B11Duf73.js → errors-2M6CKMP4.js} +5 -0
  242. package/dist/{errors-DLjJHPLK.js → errors-rZ7VIqp6.js} +2 -2
  243. package/dist/{escape-like-ImTK0ps_.d.ts → escape-like-DDWoHzh_.d.ts} +1 -1
  244. package/dist/eve/index.d.ts +5 -5
  245. package/dist/eve/index.js +5 -11
  246. package/dist/{eve-gT2Fpjut.d.ts → eve-CoAIcCkq.d.ts} +2 -2
  247. package/dist/events/index.d.ts +4 -4
  248. package/dist/events/index.js +7 -2
  249. package/dist/{events-DWDhx77e.d.ts → events-D1BOCll8.d.ts} +6 -4
  250. package/dist/{executor-Bq28caBo.js → executor-B-fD7DLt.js} +52 -35
  251. package/dist/executor-B_Hfobee.js +162 -0
  252. package/dist/{executor-BVBFM86G.d.ts → executor-CpxLPCiz.d.ts} +1 -1
  253. package/dist/{executor-CaWigTyR.d.ts → executor-DfEtf0cq.d.ts} +43 -27
  254. package/dist/{executor-DvsBbNBS.d.ts → executor-Drzu3dBK.d.ts} +2 -2
  255. package/dist/{executor-DbvExCFC.d.ts → executor-ngjKL_Pe.d.ts} +2 -2
  256. package/dist/expo/index.d.ts +4 -4
  257. package/dist/expo/index.js +6 -6
  258. package/dist/expo-sqlite/index.d.ts +3 -3
  259. package/dist/expo-sqlite/index.js +2 -2
  260. package/dist/extra-CGQ2_q3S.js +10 -0
  261. package/dist/{field-errors-BFOa7WhB.d.ts → field-errors-DIe9XYWL.d.ts} +17 -7
  262. package/dist/{field-errors-VF1yb8yI.js → field-errors-DZVRWRkf.js} +1 -1
  263. package/dist/format-DTXdu8ya.d.ts +70 -0
  264. package/dist/{framework-BmzgK32X.d.ts → framework-148t1m3C.d.ts} +5 -5
  265. package/dist/{framework-a7aRCIqv.js → framework-3ey3QmrO.js} +2 -2
  266. package/dist/function-contract-BcZenXMO.d.ts +8 -0
  267. package/dist/{gateway-C1ssRHnf.d.ts → gateway-S9vicgeo.d.ts} +4 -4
  268. package/dist/{guards-BnzDvFrz.js → guards-6F2bCtQR.js} +3 -1
  269. package/dist/h3/index.d.ts +1 -1
  270. package/dist/h3/index.js +1 -1
  271. package/dist/h3/v1/index.d.ts +1 -1
  272. package/dist/h3/v1/index.js +1 -1
  273. package/dist/{message-CaKlqdsX.js → history-GH1HJWQV.js} +65 -13
  274. package/dist/hmac-DCud0myt.js +22 -0
  275. package/dist/hono/index.d.ts +19 -14
  276. package/dist/hono/index.js +21 -16
  277. package/dist/{hooks-1BTCJsiw.js → hooks-Bhza9Hnr.js} +68 -100
  278. package/dist/http-sbmBe5d2.js +25 -0
  279. package/dist/{inbox-i7E1ppo6.d.ts → inbox-Cd1KCEBL.d.ts} +3 -3
  280. package/dist/index-B72Rvv_j.d.ts +89 -0
  281. package/dist/{index-DunNRdnT.d.ts → index-BCHR4Ucl.d.ts} +4 -4
  282. package/dist/{index-CLg87OBW.d.ts → index-BUK7jUzR.d.ts} +6 -0
  283. package/dist/{config-D44Y7PAv.d.ts → index-Ba1SI-uO.d.ts} +625 -278
  284. package/dist/{index-D48jVS-N.d.ts → index-BfxOaOYs.d.ts} +4 -5
  285. package/dist/{index-ClmjK_o-.d.ts → index-CicIyqOe.d.ts} +4 -4
  286. package/dist/{index-ACiNPN4Z.d.ts → index-D69h4QqD.d.ts} +1 -1
  287. package/dist/index-DG2SUXDQ.d.ts +58 -0
  288. package/dist/{index-Bepi-Hgg.d.ts → index-DoNVLHOU.d.ts} +3 -3
  289. package/dist/{index-CdZKQF98.d.ts → index-R274XFlg.d.ts} +1 -1
  290. package/dist/{index-CewnYSpv.d.ts → index-_4R4b01v.d.ts} +8 -18
  291. package/dist/index.d.ts +89 -14
  292. package/dist/index.js +12 -11
  293. package/dist/{json-schema-CvER4kgT.js → json-schema-CT4tvrkA.js} +148 -102
  294. package/dist/{kit-Fm-Fv7q5.js → kit-BhHr9T9v.js} +36 -10
  295. package/dist/{kit-CkNzZUqv.d.ts → kit-W99LCPBS.d.ts} +13 -7
  296. package/dist/{knowledge-BXBbT0Tr.d.ts → knowledge-CAReFpRA.d.ts} +5 -5
  297. package/dist/{knowledge-CDmiMLew.js → knowledge-DnHtb64A.js} +4 -3
  298. package/dist/list/index.d.ts +1 -2
  299. package/dist/{list-query-BRt-zDF7.d.ts → list-query-D3JQeEL7.d.ts} +4 -4
  300. package/dist/mcp/index.d.ts +49 -19
  301. package/dist/mcp/index.js +158 -94
  302. package/dist/mcp/sdk/index.d.ts +38 -6
  303. package/dist/mcp/sdk/index.js +88 -6
  304. package/dist/{message-CfDoR0Y6.d.ts → message-B0fNJgq8.d.ts} +1 -2
  305. package/dist/{messages-B9-5887d.js → messages-CJoHHCWT.js} +4 -205
  306. package/dist/{mfa-Daak8ukG.d.ts → mfa-SZc9YYyb.d.ts} +1 -1
  307. package/dist/model-OgBxvk3N.d.ts +300 -0
  308. package/dist/model-messages-Cxw_Up4f.js +206 -0
  309. package/dist/model-messages-D4GZllOD.d.ts +34 -0
  310. package/dist/modules-DksjZyMW.js +77 -0
  311. package/dist/nestjs/index.d.ts +2 -2
  312. package/dist/nestjs/index.js +1 -1
  313. package/dist/next/index.d.ts +105 -55
  314. package/dist/next/index.js +204 -170
  315. package/dist/node/index.d.ts +2 -2
  316. package/dist/node/index.js +1 -1
  317. package/dist/{onboarding-BZGHYJks.d.ts → onboarding-LZvlK1P4.d.ts} +3 -3
  318. package/dist/openapi/index.d.ts +4 -2
  319. package/dist/openapi/index.js +21 -343
  320. package/dist/optional-peer-D1pi-skw.js +24 -0
  321. package/dist/orpc/index.d.ts +8 -8
  322. package/dist/orpc/index.js +21 -20
  323. package/dist/otel/index.d.ts +3 -3
  324. package/dist/otel/index.js +7 -7
  325. package/dist/{outbox-Cq7pPYvl.d.ts → outbox-DZfAvfzC.d.ts} +6 -6
  326. package/dist/overlay/index.d.ts +233 -0
  327. package/dist/overlay/index.js +554 -0
  328. package/dist/{plugin-FGY8UhYm.d.ts → plugin-CPK2HsbY.d.ts} +42 -3
  329. package/dist/plugins/actor/index.d.ts +1 -1
  330. package/dist/plugins/actor/index.js +1 -1
  331. package/dist/plugins/rules/index.d.ts +2 -2
  332. package/dist/plugins/rules/index.js +1 -1
  333. package/dist/plugins/soft-delete/index.d.ts +3 -3
  334. package/dist/plugins/soft-delete/index.js +9 -2
  335. package/dist/plugins/tenant/index.d.ts +7 -2
  336. package/dist/plugins/tenant/index.js +16 -2
  337. package/dist/plugins/timestamps/index.d.ts +1 -1
  338. package/dist/plugins/timestamps/index.js +8 -1
  339. package/dist/plugins/validation/index.d.ts +2 -2
  340. package/dist/plugins/validation/index.js +4 -4
  341. package/dist/{pool-CAu2nLrL.d.ts → pool-gkhbGp2E.d.ts} +2 -2
  342. package/dist/postgres/index.d.ts +4 -4
  343. package/dist/postgres/index.js +2 -1
  344. package/dist/{postgrest-BLVdEnfe.d.ts → postgrest-BUqLag2Q.d.ts} +1 -1
  345. package/dist/powersync/index.d.ts +5 -5
  346. package/dist/powersync/index.js +4 -4
  347. package/dist/powersync/react/index.d.ts +3 -3
  348. package/dist/powersync/react/index.js +1 -1
  349. package/dist/{problem-BreOl8b8.js → problem-CJvFeGu7.js} +13 -2
  350. package/dist/{problem-DD8LZFjc.d.ts → problem-TvGdxO1t.d.ts} +7 -1
  351. package/dist/{provider-Di3sRutW.js → provider-DxRTex4x.js} +1 -1
  352. package/dist/{provider-D-UEMvSD.d.ts → provider-ib9wzUDz.d.ts} +2 -2
  353. package/dist/query/index.d.ts +2 -2
  354. package/dist/query/index.js +1 -1
  355. package/dist/{query-BQ-NaZon.js → query-Ctz-qKRx.js} +1 -1
  356. package/dist/rate-limit-Bw7HgmFj.js +260 -0
  357. package/dist/react/index.d.ts +9 -9
  358. package/dist/react/index.js +4 -4
  359. package/dist/react/native/index.d.ts +1 -1
  360. package/dist/react/native/index.js +2 -2
  361. package/dist/react/server.d.ts +10 -10
  362. package/dist/react/server.js +3 -3
  363. package/dist/react/session.d.ts +2 -2
  364. package/dist/{react-F80mF4-t.js → react-Bmpo59D7.js} +4 -4
  365. package/dist/react-router/index.d.ts +6 -6
  366. package/dist/react-router/index.js +9 -11
  367. package/dist/{read-set-DuKWC9Mj.js → read-set-DAeWhqPf.js} +2 -2
  368. package/dist/realtime/index.d.ts +3 -3
  369. package/dist/realtime/index.js +30 -36
  370. package/dist/{refusal-DhSU2Vvr.d.ts → refusal-CFI8-5nf.d.ts} +4 -1
  371. package/dist/{refusal-CeJWxmkH.js → refusal-K78A1Vmq.js} +5 -5
  372. package/dist/{resolve-tJZY3FEa.js → resolve-Bvgf3ut_.js} +131 -42
  373. package/dist/{resolve-ChTYeTEl.d.ts → resolve-MxXVWyhd.d.ts} +12 -8
  374. package/dist/resource--vTrBe6I.d.ts +103 -0
  375. package/dist/resource-BqNqlYg9.js +91 -0
  376. package/dist/resource-DA811u_4.js +463 -0
  377. package/dist/resource-execute-rbKvuCsY.d.ts +12 -0
  378. package/dist/resource-schemas-BJ518zFH.js +79 -0
  379. package/dist/resource-types-CqB6GWGT.d.ts +141 -0
  380. package/dist/resources-BVYPnuLo.js +56 -0
  381. package/dist/resources-DZSk8tXJ.d.ts +7 -0
  382. package/dist/{respond-DprrgyXX.d.ts → respond-Cw-zanCm.d.ts} +3 -3
  383. package/dist/{respond-BUgsXNgk.js → respond-volM3ByS.js} +4 -4
  384. package/dist/{result-D7y2fT87.d.ts → result-BchM1XZn.d.ts} +7 -1
  385. package/dist/{result-DzUbqgdW.js → result-DEqHCMKP.js} +1 -1
  386. package/dist/server/index.d.ts +81 -19
  387. package/dist/server/index.js +16 -14
  388. package/dist/{server-Bh0EVSwU.d.ts → server-types-CrAmZ8jv.d.ts} +92 -36
  389. package/dist/{shared-CxWmcyqB.js → shared-DHjhfRdV.js} +2 -15
  390. package/dist/shared-DTneRoxi.js +14 -0
  391. package/dist/{sign-in-Cb1mwv6X.js → sign-in-D_yoP0PF.js} +1 -1
  392. package/dist/signatures-BRS_p3WD.d.ts +34 -0
  393. package/dist/signatures-DsWv_bYR.js +103 -0
  394. package/dist/{signers-4y62_VIi.d.ts → signers-cpdmZYrv.d.ts} +1 -1
  395. package/dist/solid/index.d.ts +9 -18
  396. package/dist/solid/index.js +2 -2
  397. package/dist/solid-start/index.d.ts +6 -6
  398. package/dist/solid-start/index.js +7 -7
  399. package/dist/spec/index.d.ts +134 -0
  400. package/dist/spec/index.js +353 -0
  401. package/dist/{spec-pins-C89s6DyW.d.ts → spec-pins-CwzDY25w.d.ts} +18 -1
  402. package/dist/{spec-pins--j6mTok4.js → spec-pins-DsLfUH7l.js} +14 -1
  403. package/dist/sql/index.d.ts +145 -119
  404. package/dist/sql/index.js +19921 -19798
  405. package/dist/{executor-De1Of3m3.js → sql-CwuqaQ4Y.js} +34 -169
  406. package/dist/ssr/index.d.ts +4 -4
  407. package/dist/ssr/index.js +3 -2
  408. package/dist/{standard-BK0cqJ7y.js → standard-DkzZUneg.js} +2 -2
  409. package/dist/{standard-CYsm7xpT.d.ts → standard-lmkbOtPB.d.ts} +1 -1
  410. package/dist/{stats-D_AD9GGu.js → stats-DhU78Ctf.js} +8 -4
  411. package/dist/storage/index.d.ts +4 -6
  412. package/dist/storage/index.js +16 -17
  413. package/dist/{bucket-Cl46E3jS.d.ts → storage-api-CB7Zl1Ci.d.ts} +243 -8
  414. package/dist/{store-CGjgWu5n.d.ts → store-DsIYEBnv.d.ts} +1 -1
  415. package/dist/streams/index.d.ts +4 -4
  416. package/dist/streams/index.js +5 -4
  417. package/dist/streams/redis/index.d.ts +1 -1
  418. package/dist/streams/redis/index.js +5 -11
  419. package/dist/{stripe-BMj5LtsT.js → stripe-v-Y2lmop.js} +2 -8
  420. package/dist/supabase-mcp-C6tMoEjn.d.ts +43 -0
  421. package/dist/supabase-mcp-Cpn5A4i-.js +28 -0
  422. package/dist/{support-ig_K4PvS.js → support-D1pFFouF.js} +71 -35
  423. package/dist/{support-view-CVOJJLpc.d.ts → support-view-scqMgtOo.d.ts} +1 -1
  424. package/dist/svelte/index.d.ts +8 -17
  425. package/dist/svelte/index.js +2 -2
  426. package/dist/sveltekit/index.d.ts +7 -7
  427. package/dist/sveltekit/index.js +10 -12
  428. package/dist/table-schema-htM_SbCW.js +286 -0
  429. package/dist/{tags-Cx-LnIQP.d.ts → tags-BO9LjtWG.d.ts} +1 -1
  430. package/dist/tanstack-db/index.d.ts +2 -2
  431. package/dist/tanstack-db/supabase/index.d.ts +52 -0
  432. package/dist/tanstack-db/supabase/index.js +97 -0
  433. package/dist/tanstack-start/index.d.ts +6 -6
  434. package/dist/tanstack-start/index.js +8 -12
  435. package/dist/{tee-CoEppCER.js → tee-Cb98Vn3b.js} +1 -1
  436. package/dist/{template--jDkl3UP.js → template-lPVh-EwW.js} +11 -2
  437. package/dist/{temporal-required-BVvW7SYJ.js → temporal-required-BtynQtM-.js} +1 -1
  438. package/dist/{tenant-BxNFk9bx.d.ts → tenant-CM368LXb.d.ts} +2 -2
  439. package/dist/testing/index.d.ts +249 -118
  440. package/dist/testing/index.js +1418 -870
  441. package/dist/ttl-cache-XzZ-Q2eX.js +29 -0
  442. package/dist/types-BRTSpOIh.js +5 -0
  443. package/dist/{types-C05bxW-W.d.ts → types-Bb_4-vdW.d.ts} +4 -4
  444. package/dist/{types-AYOvcyep.d.ts → types-CD6yCDx3.d.ts} +5 -5
  445. package/dist/{types-6rocye-y.d.ts → types-CbOUc5IH.d.ts} +4 -4
  446. package/dist/{types-6BdhkmZe.d.ts → types-CoE5Zwy4.d.ts} +8 -0
  447. package/dist/{types-DGs5L0VN.d.ts → types-DSJ3-m9X.d.ts} +4 -4
  448. package/dist/{queue-CLJurhdy.d.ts → types-D__3EN0q.d.ts} +17 -19
  449. package/dist/{usage-CrvrL2vw.d.ts → usage-D0NNUFfr.d.ts} +3 -3
  450. package/dist/{vault-wlbBhqm7.d.ts → vault-BpmApxxW.d.ts} +3 -3
  451. package/dist/vercel-connect/index.d.ts +1 -1
  452. package/dist/vercel-connect/index.js +5 -11
  453. package/dist/{verify-DPuWngD4.d.ts → verify-C91Wyp40.d.ts} +5 -35
  454. package/dist/verify-CJbYfADA.js +124 -0
  455. package/dist/{version-C6OfRAIn.js → version-Cq8gfDbd.js} +1 -1
  456. package/dist/{view-BeFcRV6G.js → view-D5ryq3gz.js} +1 -1
  457. package/dist/{view-CF7ihnkg.d.ts → view-TpXEUcVN.d.ts} +3 -3
  458. package/dist/vue/index.d.ts +9 -18
  459. package/dist/vue/index.js +2 -2
  460. package/dist/{watch-Xuxrvxq-.js → watch-BcvtAHOd.js} +2 -2
  461. package/dist/{watch-DI34G86j.d.ts → watch-COzRWvVN.d.ts} +23 -9
  462. package/dist/{wire-DtZQ4sdE.js → wire-Df3EWkG8.js} +2 -2
  463. package/dist/{workflow-builder-DJ1oHn8g.js → workflow-builder-CHqHpAVt.js} +6 -5
  464. package/dist/workflow-sdk/builder/index.d.ts +3 -3
  465. package/dist/workflow-sdk/index.d.ts +1 -1
  466. package/dist/workflow-sdk/world/index.d.ts +23 -17
  467. package/dist/workflow-sdk/world/index.js +59 -76
  468. package/dist/{workflow-sdk-B3yLD6Br.d.ts → workflow-sdk-DTZyrvNo.d.ts} +3 -3
  469. package/dist/{workflow-sdk-world-D-prir6O.js → workflow-sdk-world-CMV1ahFW.js} +528 -526
  470. package/dist/{workflows-B0j9WKPu.d.ts → workflows-CcpCBfIe.d.ts} +3 -3
  471. package/dist/{workflows-wu1WWBn7.js → workflows-IvxzG2cl.js} +5 -4
  472. package/package.json +54 -3
  473. package/schemas/config-v1.json +243 -0
  474. package/schemas/doctor-report-v1.json +4 -1
  475. package/schemas/spec-manifest-v1.json +95 -0
  476. package/skills/better-supabase/SKILL.md +8 -4
  477. package/skills/better-supabase/references/troubleshooting.md +20 -20
  478. package/skills/better-supabase-api/references/expo.md +6 -3
  479. package/skills/better-supabase-api/references/powersync.md +2 -1
  480. package/dist/cli/config-B9HkL8nF.js +0 -2
  481. package/dist/cli/gen-CCMc39Dx.js +0 -3100
  482. package/dist/cli/gen-DRmzPI75.js +0 -2
  483. package/dist/cli/prompts-BTYQGunc.js +0 -2
  484. package/dist/cli/run-BqDPh9UH.js +0 -361
  485. package/dist/config-Dn7F5k9A.js +0 -202
  486. package/dist/history-BZih6SFP.js +0 -64
  487. package/dist/index-BkWT_uBO.d.ts +0 -51
  488. package/dist/index-Bxih3l0u.d.ts +0 -81
  489. package/dist/index-CaxrMD1A.d.ts +0 -1
  490. package/dist/index-DQh4VCc9.d.ts +0 -98
  491. package/dist/keys-4MnkWTTh.js +0 -35
  492. package/dist/messages-DYP0sUTe.d.ts +0 -59
  493. package/dist/modules-dxrVK3ID.js +0 -228
  494. package/dist/path-Cv__-OTj.d.ts +0 -17
  495. package/dist/resource-BsvzCMlX.js +0 -212
  496. package/dist/resource-IPS5xi9q.d.ts +0 -74
  497. package/dist/template-CwO38Do8.d.ts +0 -6
  498. package/dist/verify-DL41hbvY.js +0 -232
  499. package/dist/cli/{read-sets-CETOSFx4.js → read-sets-DjJrm8Wj.js} +1 -1
@@ -0,0 +1,2 @@
1
+ import { n as specCommand } from "./spec-CzosTYm3.js";
2
+ export { specCommand };
@@ -1,53 +1,18 @@
1
- import { r as defineCliCommand } from "./command-CK14fP91.js";
2
- import { i as writeIfChanged, r as sameText, t as display } from "./io-DI1mTdSA.js";
3
- import { i as plain, r as painter } from "./style-C0NFdJRL.js";
4
- import { a as entitlementsMode, n as accessProviderMode, o as moduleKeyProblems, s as providerLabel, t as compiledReadSets } from "./read-sets-CETOSFx4.js";
1
+ import { r as defineCliCommand } from "./command-DV-StG1x.js";
2
+ import { a as writeIfChanged, i as sameText, t as display } from "./io-CFzJVJ68.js";
3
+ import { i as plain, r as painter } from "./style-CB3vxgh0.js";
4
+ import { a as entitlementsMode, n as accessProviderMode, o as moduleKeyProblems, s as providerLabel, t as compiledReadSets } from "./read-sets-DjJrm8Wj.js";
5
5
  import { t as importFresh } from "./fresh-import-BeYf9I3x.js";
6
6
  import { c as migrationCommand, d as schemaPaths, n as declarativeSchemasDir, u as readSupabaseToml } from "./supabase-toml-B-bIukQF.js";
7
- import { t as fileDiff } from "./diff-SjkO5rNr.js";
7
+ import { t as fileDiff } from "./diff-D1jGdb3Y.js";
8
8
  import { n as moduleLayoutFor, t as migrationsDir } from "./sql-layout-D6cphHT3.js";
9
+ import { r as writeLine } from "./files-BVupXPIC.js";
9
10
  import { resolve } from "node:path";
10
11
  import { existsSync } from "node:fs";
11
12
  import { readFile, readdir, rm } from "node:fs/promises";
13
+ import { CONFIG_DEFAULTS } from "better-supabase/config";
12
14
  import { SQL_MODULES, contractSignature, customContracts, moduleBody, moduleFilePaths, moduleFileVersion, moduleLayout, modulePermissionKeys, moduleSchemaExtensions, moduleTopics, renderModules, resolveModules, sameModuleFile, upgradePlan } from "better-supabase/sql";
13
- //#region src/cli/topic-policies.ts
14
- const isTopic = (value) => typeof value === "object" && value !== null && "template" in value && typeof value.template === "string" && "sql" in value && typeof value.sql === "function" && "triggerSql" in value;
15
- const literalParts = (template) => template.replaceAll(/\{[^}]+\}/g, "{}");
16
- const owns = (owned, template) => owned.endsWith("*") ? template.startsWith(owned.slice(0, -1)) : literalParts(owned) === literalParts(template);
17
- const receivesOnly = (sql) => !sql.includes(" for insert ") && !sql.includes("'presence'");
18
- /** The file `realtime.policies` writes, or `undefined` when it isn't set. */
19
- async function topicPolicyFile(config, owned = []) {
20
- const policies = config.realtime.policies;
21
- if (policies === void 0) return void 0;
22
- const topics = [];
23
- for (const entry of policies.from) {
24
- const loaded = await importFresh(resolve(config.root, entry));
25
- const found = Object.values(loaded).filter(isTopic);
26
- if (found.length === 0) throw new Error(`${entry} exports no topic (defineTopic)`);
27
- for (const topic of found) if (!topics.includes(topic)) topics.push(topic);
28
- }
29
- topics.sort((a, b) => a.template < b.template ? -1 : a.template > b.template ? 1 : 0);
30
- const functions = config.authorization?.functions;
31
- const sqlOf = (topic) => topic.sql(functions === void 0 ? void 0 : { functions });
32
- const skipped = [];
33
- const written = topics.filter((topic) => {
34
- const owner = owned.find((entry) => owns(entry.topic, topic.template));
35
- if (owner === void 0 || !receivesOnly(sqlOf(topic))) return true;
36
- skipped.push(`-- Skipped topic ${topic.template}: the ${owner.module} module writes its receive policy.`);
37
- return false;
38
- });
39
- const header = [
40
- "-- better-supabase: realtime topic policies",
41
- `-- Written by \`better-supabase sql sync\` from ${policies.from.join(", ")}; edit the topics, not this file.`,
42
- ...skipped
43
- ].join("\n");
44
- return {
45
- path: policies.output,
46
- contents: `${header}\n\n${written.map(sqlOf).join("\n")}`
47
- };
48
- }
49
- //#endregion
50
- //#region src/cli/commands/sql.ts
15
+ //#region src/cli/sql/args.ts
51
16
  const SQL_ARGS = {
52
17
  action: {
53
18
  type: "positional",
@@ -73,6 +38,8 @@ const SQL_ARGS = {
73
38
  }
74
39
  };
75
40
  const USAGE = "Run `better-supabase sql --help` for the actions.";
41
+ //#endregion
42
+ //#region src/cli/sql/providers.ts
76
43
  /** Modules that fill the `memberships` claim, which a provider's hook may own. */
77
44
  const MEMBERSHIP_CLAIM_MODULES = /* @__PURE__ */ new Set(["tenant"]);
78
45
  /** Whether the provider's access token hook writes the `memberships` claim itself. */
@@ -142,26 +109,8 @@ async function layoutFor(config, args, names) {
142
109
  permissionCatalog: permissionKeysFor(config)
143
110
  });
144
111
  }
145
- const MODULE_TEST_MARKER = /^-- @bs-module-test ([a-z0-9-]+)$/m;
146
- /**
147
- * Test files a SQL module wrote for an earlier layout (a table that is no
148
- * longer audited), for the modules in `names`.
149
- */
150
- async function staleModuleTests(config, names, sqlLayout, files) {
151
- const dir = (sqlLayout.testsDir ?? "supabase/tests").replace(/\/$/, "");
152
- const entries = await readdir(resolve(config.root, dir)).catch(() => []);
153
- const current = new Set(files.map((file) => file.path));
154
- const modules = new Set(resolveModules(names, sqlLayout).map((module) => module.name));
155
- const stale = [];
156
- for (const name of entries.toSorted()) {
157
- const path = `${dir}/${name}`;
158
- if (!name.endsWith(".test.sql") || current.has(path)) continue;
159
- const text = await readFile(resolve(config.root, path), "utf8");
160
- const module = MODULE_TEST_MARKER.exec(text)?.[1];
161
- if (module !== void 0 && modules.has(module)) stale.push(path);
162
- }
163
- return stale;
164
- }
112
+ //#endregion
113
+ //#region src/cli/sql/migrations.ts
165
114
  /** `YYYYMMDDHHMMSS` in UTC, the Supabase CLI's migration prefix. */
166
115
  const migrationStamp = (now) => now.toISOString().replaceAll(/[-:T]/g, "").slice(0, 14);
167
116
  /**
@@ -174,35 +123,6 @@ function stampAfter(migrations, now) {
174
123
  const at = Math.floor(now.getTime() / 1e3) * 1e3;
175
124
  return migrationStamp(new Date(Math.max(at, newest + 1e3)));
176
125
  }
177
- async function write(config, args, names, sqlLayout, only) {
178
- const lines = [];
179
- const dryRun = args["dry-run"] === true;
180
- let data = false;
181
- const files = renderModules(names, sqlLayout).filter((file) => only === void 0 || only.includes(file.module));
182
- for (const path of await staleModuleTests(config, only ?? names, sqlLayout, files)) {
183
- const shown = display(config.root, path);
184
- if (dryRun) {
185
- lines.push(`Would remove ${shown}`);
186
- continue;
187
- }
188
- await rm(resolve(config.root, path));
189
- lines.push(`Removed ${shown}`);
190
- }
191
- for (const file of files) {
192
- const path = resolve(config.root, file.path);
193
- const shown = display(config.root, file.path);
194
- if (dryRun) {
195
- lines.push(`Would write ${shown} (${file.module})`);
196
- continue;
197
- }
198
- const wrote = await writeIfChanged(path, file.contents);
199
- if (wrote && file.kind === "data") data = true;
200
- lines.push(`${wrote ? "Wrote" : "Unchanged"} ${shown} (${file.module})`);
201
- }
202
- lines.push(...await writeExtensionsMigration(config, files, dryRun));
203
- if (data) lines.push("", DATA_NEXT);
204
- return lines;
205
- }
206
126
  const EXTENSIONS_SUFFIX = "_better_supabase_extensions.sql";
207
127
  const MIGRATION_EXTENSION = /^\s*create\s+extension\s+(?:if\s+not\s+exists\s+)?"?([a-z_][a-z0-9_]*)"?/gim;
208
128
  async function unmigratedExtensions(config, files) {
@@ -220,10 +140,10 @@ async function unmigratedExtensions(config, files) {
220
140
  missing: moduleSchemaExtensions(files).filter((extension) => !created.has(extension.name))
221
141
  };
222
142
  }
223
- async function writeExtensionsMigration(config, files, dryRun) {
143
+ async function writeExtensionsMigration(config, files, dryRun, now) {
224
144
  const { dir, existing, missing } = await unmigratedExtensions(config, files);
225
145
  if (missing.length === 0) return [];
226
- const path = `${dir}/${stampAfter(existing, /* @__PURE__ */ new Date(Date.now() - 1e3))}${EXTENSIONS_SUFFIX}`;
146
+ const path = `${dir}/${stampAfter(existing, /* @__PURE__ */ new Date(now().getTime() - 1e3))}${EXTENSIONS_SUFFIX}`;
227
147
  if (dryRun) return [`Would write ${path}`];
228
148
  await writeIfChanged(resolve(config.root, path), `-- better-supabase sql: the extensions of ${missing.map((extension) => extension.name).join(", ")}, created before the schema migration that needs them.\n\n${missing.map((extension) => extension.statement).join("\n")}\n`);
229
149
  return [`Wrote ${path}`, "It creates the extensions the module schemas need, so create the schema migration after it."];
@@ -235,7 +155,7 @@ const DATA_SUFFIX = "_better_supabase_module_data.sql";
235
155
  * the schema migration that creates their tables. Every statement is
236
156
  * idempotent, so the migration carries all of them, not only the changes.
237
157
  */
238
- async function dataMigration(config, args) {
158
+ async function dataMigration(config, args, now) {
239
159
  if (config.sql.moduleNames.length === 0) return {
240
160
  code: 0,
241
161
  output: "sql.modules is empty; nothing to write."
@@ -255,7 +175,7 @@ async function dataMigration(config, args) {
255
175
  code: 0,
256
176
  output: `${dir}/${latest} already has these rows; nothing to write.`
257
177
  };
258
- const path = `${dir}/${stampAfter(existing, /* @__PURE__ */ new Date())}${DATA_SUFFIX}`;
178
+ const path = `${dir}/${stampAfter(existing, now())}${DATA_SUFFIX}`;
259
179
  if (args["dry-run"] === true) return {
260
180
  code: 0,
261
181
  output: `Would write ${path}`
@@ -266,6 +186,57 @@ async function dataMigration(config, args) {
266
186
  output: `Wrote ${path}`
267
187
  };
268
188
  }
189
+ //#endregion
190
+ //#region src/cli/sql/write.ts
191
+ const MODULE_TEST_MARKER = /^-- @bs-module-test ([a-z0-9-]+)$/m;
192
+ /**
193
+ * Test files a SQL module wrote for an earlier layout (a table that is no
194
+ * longer audited), for the modules in `names`.
195
+ */
196
+ async function staleModuleTests(config, names, sqlLayout, files) {
197
+ const dir = (sqlLayout.testsDir ?? CONFIG_DEFAULTS.sql.testsDir).replace(/\/$/, "");
198
+ const entries = await readdir(resolve(config.root, dir)).catch(() => []);
199
+ const current = new Set(files.map((file) => file.path));
200
+ const modules = new Set(resolveModules(names, sqlLayout).map((module) => module.name));
201
+ const stale = [];
202
+ for (const name of entries.toSorted()) {
203
+ const path = `${dir}/${name}`;
204
+ if (!name.endsWith(".test.sql") || current.has(path)) continue;
205
+ const text = await readFile(resolve(config.root, path), "utf8");
206
+ const module = MODULE_TEST_MARKER.exec(text)?.[1];
207
+ if (module !== void 0 && modules.has(module)) stale.push(path);
208
+ }
209
+ return stale;
210
+ }
211
+ async function write(config, args, names, sqlLayout, now, only) {
212
+ const lines = [];
213
+ const dryRun = args["dry-run"] === true;
214
+ let data = false;
215
+ const files = renderModules(names, sqlLayout).filter((file) => only === void 0 || only.includes(file.module));
216
+ for (const path of await staleModuleTests(config, only ?? names, sqlLayout, files)) {
217
+ const shown = display(config.root, path);
218
+ if (dryRun) {
219
+ lines.push(`Would remove ${shown}`);
220
+ continue;
221
+ }
222
+ await rm(resolve(config.root, path));
223
+ lines.push(`Removed ${shown}`);
224
+ }
225
+ for (const file of files) {
226
+ const path = resolve(config.root, file.path);
227
+ const shown = display(config.root, file.path);
228
+ if (dryRun) {
229
+ lines.push(`Would write ${shown} (${file.module})`);
230
+ continue;
231
+ }
232
+ const { wrote, line } = await writeLine(path, file.contents, shown, ` (${file.module})`);
233
+ if (wrote && file.kind === "data") data = true;
234
+ lines.push(line);
235
+ }
236
+ lines.push(...await writeExtensionsMigration(config, files, dryRun, now));
237
+ if (data) lines.push("", DATA_NEXT);
238
+ return lines;
239
+ }
269
240
  /** A note when migra's `schema_paths` is set and misses module files, which `supabase db diff` would then skip. */
270
241
  async function unlistedModuleFiles(config, names, sqlLayout) {
271
242
  const toml = await readSupabaseToml(config.root);
@@ -285,12 +256,170 @@ async function unlistedModuleFiles(config, names, sqlLayout) {
285
256
  "Or switch to pg-delta, which orders the files by dependency: add [experimental.pgdelta] with enabled = true and remove schema_paths (doctor BS316)."
286
257
  ];
287
258
  }
259
+ //#endregion
260
+ //#region src/cli/sql/add.ts
261
+ async function addModules(config, args, names, now) {
262
+ if (names.length === 0) return {
263
+ code: 2,
264
+ error: `Name at least one module.\n${USAGE}`
265
+ };
266
+ const unknown = names.filter((name) => !(name in SQL_MODULES));
267
+ if (unknown.length > 0) return {
268
+ code: 2,
269
+ error: `Unknown module ${unknown.join(", ")}. Available: ${Object.keys(SQL_MODULES).join(", ")}`
270
+ };
271
+ const owner = config.authorization && providerOwnsMemberships(config) ? providerLabel(config.authorization) : void 0;
272
+ const hookModules = names.filter((name) => MEMBERSHIP_CLAIM_MODULES.has(name));
273
+ if (owner && hookModules.length > 0 && args.force !== true) return {
274
+ code: 1,
275
+ error: [
276
+ `The access token hook of ${owner} writes the memberships claim.`,
277
+ `${hookModules.join(" and ")} would add a second source for it. Use the provider's hook instead,`,
278
+ "or pass --force to write the modules anyway."
279
+ ].join("\n")
280
+ };
281
+ const listed = [...config.sql.moduleNames, ...names.filter((name) => !config.sql.moduleNames.includes(name))];
282
+ const sqlLayout = await layoutFor(config, args, listed);
283
+ const lines = await write(config, args, listed, sqlLayout, now, resolveModules(names, sqlLayout).map((module) => module.name));
284
+ const pulledIn = resolveModules(names, sqlLayout).map((module) => module.name).filter((name) => MEMBERSHIP_CLAIM_MODULES.has(name) && !names.includes(name));
285
+ if (owner && pulledIn.length > 0) lines.push("", `${pulledIn.join(" and ")} came along as a dependency: its memberships table backs has_organization_role() and has_entitlement().`, `The hook of ${owner} still writes the memberships claim, so don't call better_supabase.membership_claims from a hook.`, "Make better_supabase.memberships one of the provider's membership sources if both should agree.");
286
+ const untracked = resolveModules(names, sqlLayout).map((module) => module.name).filter((name) => !config.sql.moduleNames.includes(name));
287
+ if (untracked.length > 0) lines.push("", `Add them to your config so \`sql sync --check\` keeps them current:`, ` sql: { modules: [${[...config.sql.moduleNames, ...untracked].map((name) => `'${name}'`).join(", ")}] }`);
288
+ if (args["dry-run"] !== true) lines.push(...await unlistedModuleFiles(config, names, sqlLayout));
289
+ lines.push("", `Then create a migration: ${migrationCommand(await readSupabaseToml(config.root), "better_supabase_module")}`);
290
+ return {
291
+ code: 0,
292
+ output: lines.join("\n")
293
+ };
294
+ }
295
+ //#endregion
296
+ //#region src/cli/sql/list.ts
297
+ async function listModules(config, args) {
298
+ const sqlLayout = await layout(config, args);
299
+ const files = moduleFilePaths(Object.keys(SQL_MODULES), sqlLayout);
300
+ return {
301
+ code: 0,
302
+ output: `${Object.values(SQL_MODULES).map((module) => {
303
+ const path = files.get(module.name);
304
+ const installed = path !== void 0 && existsSync(resolve(config.root, path));
305
+ const tracked = config.sql.moduleNames.includes(module.name);
306
+ const mark = path === void 0 ? "◇" : installed ? tracked ? "●" : "○" : " ";
307
+ const requires = sqlLayout.entitlementsProvider && module.providerRequires ? module.providerRequires : module.requires;
308
+ const needs = requires.length > 0 ? ` (needs ${requires.join(", ")})` : "";
309
+ const integrates = module.integrates ?? [];
310
+ const works = integrates.includes("*") ? " (works with every installed module)" : integrates.length > 0 ? ` (works with ${integrates.join(", ")})` : "";
311
+ return `${mark} ${module.name.padEnd(15)} ${module.description}${needs}${works}`;
312
+ }).join("\n")}\n\n● installed and in sql.modules ○ installed, not in sql.modules ◇ custom mode (the app implements it)`
313
+ };
314
+ }
315
+ //#endregion
316
+ //#region src/cli/sql/print.ts
317
+ async function printModule(config, args, names) {
318
+ const [name] = names;
319
+ const module = name ? SQL_MODULES[name] : void 0;
320
+ if (!module) return {
321
+ code: 2,
322
+ error: `Name one module: ${Object.keys(SQL_MODULES).join(", ")}`
323
+ };
324
+ const body = moduleBody(module.name, await layout(config, args, [module.name]));
325
+ if (body === void 0) return {
326
+ code: 0,
327
+ output: `-- sql.modules.${module.name} is in custom mode: the app writes these functions.\n${customContracts([module.name], await layout(config, args, [module.name])).flatMap((contract) => contract.functions.map((fn) => `-- ${contract.schema}.${fn.name}(${contractSignature(fn, contract.idType)}) returns ${fn.returns.replaceAll("{id}", contract.idType)}`)).join("\n")}`
328
+ };
329
+ return {
330
+ code: 0,
331
+ output: body
332
+ };
333
+ }
334
+ //#endregion
335
+ //#region src/cli/topic-policies.ts
336
+ const isTopic = (value) => typeof value === "object" && value !== null && "template" in value && typeof value.template === "string" && "sql" in value && typeof value.sql === "function" && "triggerSql" in value;
337
+ const literalParts = (template) => template.replaceAll(/\{[^}]+\}/g, "{}");
338
+ const owns = (owned, template) => owned.endsWith("*") ? template.startsWith(owned.slice(0, -1)) : literalParts(owned) === literalParts(template);
339
+ const receivesOnly = (sql) => !sql.includes(" for insert ") && !sql.includes("'presence'");
340
+ /** The file `realtime.policies` writes, or `undefined` when it isn't set. */
341
+ async function topicPolicyFile(config, owned = []) {
342
+ const policies = config.realtime.policies;
343
+ if (policies === void 0) return void 0;
344
+ const topics = [];
345
+ for (const entry of policies.from) {
346
+ const loaded = await importFresh(resolve(config.root, entry));
347
+ const found = Object.values(loaded).filter(isTopic);
348
+ if (found.length === 0) throw new Error(`${entry} exports no topic (defineTopic)`);
349
+ for (const topic of found) if (!topics.includes(topic)) topics.push(topic);
350
+ }
351
+ topics.sort((a, b) => a.template < b.template ? -1 : a.template > b.template ? 1 : 0);
352
+ const functions = config.authorization?.functions;
353
+ const sqlOf = (topic) => topic.sql(functions === void 0 ? void 0 : { functions });
354
+ const skipped = [];
355
+ const written = topics.filter((topic) => {
356
+ const owner = owned.find((entry) => owns(entry.topic, topic.template));
357
+ if (owner === void 0 || !receivesOnly(sqlOf(topic))) return true;
358
+ skipped.push(`-- Skipped topic ${topic.template}: the ${owner.module} module writes its receive policy.`);
359
+ return false;
360
+ });
361
+ const header = [
362
+ "-- better-supabase: realtime topic policies",
363
+ `-- Written by \`better-supabase sql sync\` from ${policies.from.join(", ")}; edit the topics, not this file.`,
364
+ ...skipped
365
+ ].join("\n");
366
+ return {
367
+ path: policies.output,
368
+ contents: `${header}\n\n${written.map(sqlOf).join("\n")}`
369
+ };
370
+ }
371
+ //#endregion
372
+ //#region src/cli/sql/sync.ts
373
+ async function syncModules(config, args, paint, now) {
374
+ const topics = await topicPolicyFile(config, config.sql.moduleNames.length === 0 ? [] : moduleTopics(config.sql.moduleNames, await layoutFor(config, args, config.sql.moduleNames)));
375
+ if (config.sql.moduleNames.length === 0 && topics === void 0) return {
376
+ code: 0,
377
+ output: "sql.modules is empty; nothing to sync."
378
+ };
379
+ if (args.check !== true) {
380
+ const lines = config.sql.moduleNames.length === 0 ? [] : await write(config, args, config.sql.moduleNames, await layoutFor(config, args, config.sql.moduleNames), now);
381
+ if (topics !== void 0) {
382
+ const shown = display(config.root, topics.path);
383
+ if (args["dry-run"] === true) lines.push(`Would write ${shown} (topics)`);
384
+ else lines.push((await writeLine(resolve(config.root, topics.path), topics.contents, shown, " (topics)")).line);
385
+ }
386
+ return {
387
+ code: 0,
388
+ output: lines.join("\n")
389
+ };
390
+ }
391
+ const sqlLayout = await layoutFor(config, args, config.sql.moduleNames);
392
+ const files = [...renderModules(config.sql.moduleNames, sqlLayout), ...topics === void 0 ? [] : [{
393
+ ...topics,
394
+ topics: true
395
+ }]];
396
+ const stale = (await staleModuleTests(config, config.sql.moduleNames, sqlLayout, renderModules(config.sql.moduleNames, sqlLayout))).map((path) => display(config.root, path));
397
+ const diffs = stale.map((path) => `${path} is no longer written; \`sql sync\` removes it.`);
398
+ for (const file of files) {
399
+ const current = await readFile(resolve(config.root, file.path), "utf8").catch(() => void 0);
400
+ if (file.topics ? !sameText(current, file.contents) : !sameModuleFile(current, file.contents)) {
401
+ const shown = display(config.root, file.path);
402
+ stale.push(shown);
403
+ diffs.push(fileDiff(shown, current, file.contents, paint));
404
+ }
405
+ }
406
+ return stale.length === 0 ? {
407
+ code: 0,
408
+ output: "SQL module files are up to date."
409
+ } : {
410
+ code: 1,
411
+ output: diffs.join("\n\n"),
412
+ error: `Out of date: ${stale.join(", ")}. Run \`better-supabase sql sync\`.`
413
+ };
414
+ }
415
+ //#endregion
416
+ //#region src/cli/sql/upgrade.ts
288
417
  /**
289
418
  * Rewrites the module files of modules behind the current version, and writes
290
419
  * their upgrade steps (renames, backfills) as a migration that runs before
291
420
  * the one the schema diff creates.
292
421
  */
293
- async function upgrade(config, args, paint) {
422
+ async function upgrade(config, args, paint, now) {
294
423
  if (config.sql.moduleNames.length === 0) return {
295
424
  code: 0,
296
425
  output: "sql.modules is empty; nothing to upgrade."
@@ -339,7 +468,7 @@ async function upgrade(config, args, paint) {
339
468
  const steps = plan.flatMap((entry) => entry.steps.filter((step) => step.sql !== "").map((step) => `-- ${entry.module}: version ${String(step.from)} to ${String(step.from + 1)}. ${step.description}\n${step.sql}`));
340
469
  const dryRun = args["dry-run"] === true;
341
470
  if (steps.length > 0) {
342
- const path = `${migrationsDir(config)}/${migrationStamp(/* @__PURE__ */ new Date())}_better_supabase_block_upgrade.sql`;
471
+ const path = `${migrationsDir(config)}/${migrationStamp(now())}_better_supabase_block_upgrade.sql`;
343
472
  const contents = `-- better-supabase sql upgrade: steps that run before the schema diff.\n\n${steps.join("\n\n")}\n`;
344
473
  if (dryRun) lines.push(`Would write ${path}`);
345
474
  else {
@@ -348,131 +477,24 @@ async function upgrade(config, args, paint) {
348
477
  }
349
478
  }
350
479
  for (const entry of plan) lines.push(`${entry.module}: version ${String(entry.from)} to ${String(entry.to)}`, ...entry.steps.map((step) => ` ${step.description}`));
351
- lines.push(...await write(config, args, config.sql.moduleNames, sqlLayout), "", `Then create a migration: ${migrationCommand(await readSupabaseToml(config.root), "better_supabase_module")}`);
480
+ lines.push(...await write(config, args, config.sql.moduleNames, sqlLayout, now), "", `Then create a migration: ${migrationCommand(await readSupabaseToml(config.root), "better_supabase_module")}`);
352
481
  return {
353
482
  code: 0,
354
483
  output: lines.join("\n")
355
484
  };
356
485
  }
357
- async function runSql(config, args, paint = plain) {
358
- const [action, ...names] = args._;
486
+ //#endregion
487
+ //#region src/cli/commands/sql.ts
488
+ const SYSTEM_DEPS = { now: () => /* @__PURE__ */ new Date() };
489
+ async function runSql(config, args, paint = plain, deps = SYSTEM_DEPS) {
490
+ const [action, ...names] = args._ ?? [];
359
491
  switch (action) {
360
- case "list": {
361
- const sqlLayout = await layout(config, args);
362
- const files = moduleFilePaths(Object.keys(SQL_MODULES), sqlLayout);
363
- return {
364
- code: 0,
365
- output: `${Object.values(SQL_MODULES).map((module) => {
366
- const path = files.get(module.name);
367
- const installed = path !== void 0 && existsSync(resolve(config.root, path));
368
- const tracked = config.sql.moduleNames.includes(module.name);
369
- const mark = path === void 0 ? "◇" : installed ? tracked ? "●" : "○" : " ";
370
- const requires = sqlLayout.entitlementsProvider && module.providerRequires ? module.providerRequires : module.requires;
371
- const needs = requires.length > 0 ? ` (needs ${requires.join(", ")})` : "";
372
- const integrates = module.integrates ?? [];
373
- const works = integrates.includes("*") ? " (works with every installed module)" : integrates.length > 0 ? ` (works with ${integrates.join(", ")})` : "";
374
- return `${mark} ${module.name.padEnd(15)} ${module.description}${needs}${works}`;
375
- }).join("\n")}\n\n● installed and in sql.modules ○ installed, not in sql.modules ◇ custom mode (the app implements it)`
376
- };
377
- }
378
- case "add": {
379
- if (names.length === 0) return {
380
- code: 2,
381
- error: `Name at least one module.\n${USAGE}`
382
- };
383
- const unknown = names.filter((name) => !(name in SQL_MODULES));
384
- if (unknown.length > 0) return {
385
- code: 2,
386
- error: `Unknown module ${unknown.join(", ")}. Available: ${Object.keys(SQL_MODULES).join(", ")}`
387
- };
388
- const owner = config.authorization && providerOwnsMemberships(config) ? providerLabel(config.authorization) : void 0;
389
- const hookModules = names.filter((name) => MEMBERSHIP_CLAIM_MODULES.has(name));
390
- if (owner && hookModules.length > 0 && args.force !== true) return {
391
- code: 1,
392
- error: [
393
- `The access token hook of ${owner} writes the memberships claim.`,
394
- `${hookModules.join(" and ")} would add a second source for it. Use the provider's hook instead,`,
395
- "or pass --force to write the modules anyway."
396
- ].join("\n")
397
- };
398
- const listed = [...config.sql.moduleNames, ...names.filter((name) => !config.sql.moduleNames.includes(name))];
399
- const sqlLayout = await layoutFor(config, args, listed);
400
- const lines = await write(config, args, listed, sqlLayout, resolveModules(names, sqlLayout).map((module) => module.name));
401
- const pulledIn = resolveModules(names, sqlLayout).map((module) => module.name).filter((name) => MEMBERSHIP_CLAIM_MODULES.has(name) && !names.includes(name));
402
- if (owner && pulledIn.length > 0) lines.push("", `${pulledIn.join(" and ")} came along as a dependency: its memberships table backs has_organization_role() and has_entitlement().`, `The hook of ${owner} still writes the memberships claim, so don't call better_supabase.membership_claims from a hook.`, "Make better_supabase.memberships one of the provider's membership sources if both should agree.");
403
- const untracked = resolveModules(names, sqlLayout).map((module) => module.name).filter((name) => !config.sql.moduleNames.includes(name));
404
- if (untracked.length > 0) lines.push("", `Add them to your config so \`sql sync --check\` keeps them current:`, ` sql: { modules: [${[...config.sql.moduleNames, ...untracked].map((name) => `'${name}'`).join(", ")}] }`);
405
- if (args["dry-run"] !== true) lines.push(...await unlistedModuleFiles(config, names, sqlLayout));
406
- lines.push("", `Then create a migration: ${migrationCommand(await readSupabaseToml(config.root), "better_supabase_module")}`);
407
- return {
408
- code: 0,
409
- output: lines.join("\n")
410
- };
411
- }
412
- case "sync": {
413
- const topics = await topicPolicyFile(config, config.sql.moduleNames.length === 0 ? [] : moduleTopics(config.sql.moduleNames, await layoutFor(config, args, config.sql.moduleNames)));
414
- if (config.sql.moduleNames.length === 0 && topics === void 0) return {
415
- code: 0,
416
- output: "sql.modules is empty; nothing to sync."
417
- };
418
- if (args.check !== true) {
419
- const lines = config.sql.moduleNames.length === 0 ? [] : await write(config, args, config.sql.moduleNames, await layoutFor(config, args, config.sql.moduleNames));
420
- if (topics !== void 0) {
421
- const shown = display(config.root, topics.path);
422
- if (args["dry-run"] === true) lines.push(`Would write ${shown} (topics)`);
423
- else {
424
- const wrote = await writeIfChanged(resolve(config.root, topics.path), topics.contents);
425
- lines.push(`${wrote ? "Wrote" : "Unchanged"} ${shown} (topics)`);
426
- }
427
- }
428
- return {
429
- code: 0,
430
- output: lines.join("\n")
431
- };
432
- }
433
- const sqlLayout = await layoutFor(config, args, config.sql.moduleNames);
434
- const files = [...renderModules(config.sql.moduleNames, sqlLayout), ...topics === void 0 ? [] : [{
435
- ...topics,
436
- topics: true
437
- }]];
438
- const stale = (await staleModuleTests(config, config.sql.moduleNames, sqlLayout, renderModules(config.sql.moduleNames, sqlLayout))).map((path) => display(config.root, path));
439
- const diffs = stale.map((path) => `${path} is no longer written; \`sql sync\` removes it.`);
440
- for (const file of files) {
441
- const current = await readFile(resolve(config.root, file.path), "utf8").catch(() => void 0);
442
- if (file.topics ? !sameText(current, file.contents) : !sameModuleFile(current, file.contents)) {
443
- const shown = display(config.root, file.path);
444
- stale.push(shown);
445
- diffs.push(fileDiff(shown, current, file.contents, paint));
446
- }
447
- }
448
- return stale.length === 0 ? {
449
- code: 0,
450
- output: "SQL module files are up to date."
451
- } : {
452
- code: 1,
453
- output: diffs.join("\n\n"),
454
- error: `Out of date: ${stale.join(", ")}. Run \`better-supabase sql sync\`.`
455
- };
456
- }
457
- case "upgrade": return upgrade(config, args, paint);
458
- case "data": return dataMigration(config, args);
459
- case "print": {
460
- const [name] = names;
461
- const module = name ? SQL_MODULES[name] : void 0;
462
- if (!module) return {
463
- code: 2,
464
- error: `Name one module: ${Object.keys(SQL_MODULES).join(", ")}`
465
- };
466
- const body = moduleBody(module.name, await layout(config, args, [module.name]));
467
- if (body === void 0) return {
468
- code: 0,
469
- output: `-- sql.modules.${module.name} is in custom mode: the app writes these functions.\n${customContracts([module.name], await layout(config, args, [module.name])).flatMap((contract) => contract.functions.map((fn) => `-- ${contract.schema}.${fn.name}(${contractSignature(fn, contract.idType)}) returns ${fn.returns.replaceAll("{id}", contract.idType)}`)).join("\n")}`
470
- };
471
- return {
472
- code: 0,
473
- output: body
474
- };
475
- }
492
+ case "list": return listModules(config, args);
493
+ case "add": return addModules(config, args, names, deps.now);
494
+ case "sync": return syncModules(config, args, paint, deps.now);
495
+ case "upgrade": return upgrade(config, args, paint, deps.now);
496
+ case "data": return dataMigration(config, args, deps.now);
497
+ case "print": return printModule(config, args, names);
476
498
  case void 0: return {
477
499
  code: 2,
478
500
  error: `Name an action.\n${USAGE}`
@@ -492,4 +514,4 @@ const sqlCommand = defineCliCommand({
492
514
  run: (args, { config, io }) => runSql(config, args, painter(io.color))
493
515
  });
494
516
  //#endregion
495
- export { sqlCommand };
517
+ export { sqlCommand as n, runSql as t };
@@ -0,0 +1,3 @@
1
+ import "./sql-layout-D6cphHT3.js";
2
+ import { n as sqlCommand } from "./sql-BKOOQAX3.js";
3
+ export { sqlCommand };
@@ -5,9 +5,9 @@ const colored = (format, text) => styleText(format, text, { validateStream: fals
5
5
  function painter(color) {
6
6
  return color === true ? colored : plain;
7
7
  }
8
- /** Whether stdout takes colors: a TTY, and neither `NO_COLOR` nor `NODE_DISABLE_COLORS` set (`FORCE_COLOR` overrides). */
9
- function colorEnabled() {
10
- return styleText("red", "x", { stream: process.stdout }) !== "x";
8
+ /** Whether `stream` takes colors: a TTY, and neither `NO_COLOR` nor `NODE_DISABLE_COLORS` set (`FORCE_COLOR` overrides). */
9
+ function colorEnabled(stream) {
10
+ return styleText("red", "x", { stream }) !== "x";
11
11
  }
12
12
  const VERBS = [
13
13
  [/^(?:Wrote|Updated)\b/, "green"],