better-supabase 0.5.0 → 0.6.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 (536) hide show
  1. package/README.md +299 -41
  2. package/dist/access-sql-B0dF-SoF.js +181 -0
  3. package/dist/actor-CQTlc1Hh.d.ts +43 -0
  4. package/dist/adapter-Bc1o3zyy.js +1106 -0
  5. package/dist/agents-CVHGd7It.d.ts +94 -0
  6. package/dist/ai-cache-CBWs1W0k.js +80 -0
  7. package/dist/ai-cache-DaDu_G5L.d.ts +64 -0
  8. package/dist/ai-chat-7amvXjmQ.d.ts +590 -0
  9. package/dist/ai-chat-B24UI962.js +743 -0
  10. package/dist/ai-files-CSPNswUY.js +319 -0
  11. package/dist/ai-sdk/agents/index.d.ts +74 -0
  12. package/dist/ai-sdk/agents/index.js +159 -0
  13. package/dist/ai-sdk/batches/index.d.ts +74 -0
  14. package/dist/ai-sdk/batches/index.js +180 -0
  15. package/dist/ai-sdk/cache/index.d.ts +38 -0
  16. package/dist/ai-sdk/cache/index.js +127 -0
  17. package/dist/ai-sdk/chat/index.d.ts +2 -0
  18. package/dist/ai-sdk/chat/index.js +246 -0
  19. package/dist/ai-sdk/embeddings/index.d.ts +3 -0
  20. package/dist/ai-sdk/embeddings/index.js +2 -0
  21. package/dist/ai-sdk/files/index.d.ts +61 -0
  22. package/dist/ai-sdk/files/index.js +111 -0
  23. package/dist/ai-sdk/index.d.ts +145 -0
  24. package/dist/ai-sdk/index.js +174 -0
  25. package/dist/ai-sdk/mcp/index.d.ts +102 -0
  26. package/dist/ai-sdk/mcp/index.js +362 -0
  27. package/dist/ai-sdk/memory/index.d.ts +67 -0
  28. package/dist/ai-sdk/memory/index.js +175 -0
  29. package/dist/ai-sdk/react/index.d.ts +2 -0
  30. package/dist/ai-sdk/react/index.js +3 -0
  31. package/dist/ai-sdk/react/server.d.ts +6 -0
  32. package/dist/ai-sdk/react/server.js +7 -0
  33. package/dist/ai-sdk/workflow/index.d.ts +249 -0
  34. package/dist/ai-sdk/workflow/index.js +575 -0
  35. package/dist/ai-sdk/workflow/react/index.d.ts +20 -0
  36. package/dist/ai-sdk/workflow/react/index.js +66 -0
  37. package/dist/ai-sdk/workflow/react/server.d.ts +10 -0
  38. package/dist/ai-sdk/workflow/react/server.js +12 -0
  39. package/dist/ai-tasks-Cd1HMFvB.d.ts +131 -0
  40. package/dist/announcements-CiyOs-xP.js +107 -0
  41. package/dist/announcements-ZRGnScWI.d.ts +72 -0
  42. package/dist/api-keys-rCGtKaZA.d.ts +156 -0
  43. package/dist/assistant-DwdpDH1q.d.ts +147 -0
  44. package/dist/astro/index.d.ts +86 -0
  45. package/dist/astro/index.js +93 -0
  46. package/dist/attributes-5dYul0u0.js +13 -0
  47. package/dist/auth-link-BjFPqwLz.d.ts +97 -0
  48. package/dist/auth-link-DrDX9KOT.js +114 -0
  49. package/dist/authorization-BFCqamMs.d.ts +172 -0
  50. package/dist/before-route-CnR0C0Jr.js +30 -0
  51. package/dist/bind-Bu_ZNa3W.d.ts +62 -0
  52. package/dist/bind-l4kAvYSv.js +97 -0
  53. package/dist/block-events-CrT8r7Fe.js +76 -0
  54. package/dist/block-fields-GFkxl4dP.js +49 -0
  55. package/dist/block-fields-SJ6fEf3o.d.ts +31 -0
  56. package/dist/block-helpers-CKtbFcRv.d.ts +37 -0
  57. package/dist/block-helpers-DWHxHsEQ.js +190 -0
  58. package/dist/block-hooks-BmjMyXTa.js +114 -0
  59. package/dist/block-hooks-plbZ0AbJ.d.ts +107 -0
  60. package/dist/{kit-transport-DJlHQUBU.js → block-transport-BLr-ZgLc.js} +11 -7
  61. package/dist/block-transport-DvaoPuZ9.d.ts +48 -0
  62. package/dist/blocks/agents/index.d.ts +3 -0
  63. package/dist/blocks/agents/index.js +123 -0
  64. package/dist/blocks/ai-cache/index.d.ts +3 -0
  65. package/dist/blocks/ai-cache/index.js +3 -0
  66. package/dist/blocks/ai-chat/index.d.ts +31 -0
  67. package/dist/blocks/ai-chat/index.js +5 -0
  68. package/dist/blocks/ai-chat/react/index.d.ts +77 -0
  69. package/dist/blocks/ai-chat/react/index.js +387 -0
  70. package/dist/blocks/ai-chat/react/server.d.ts +16 -0
  71. package/dist/blocks/ai-chat/react/server.js +14 -0
  72. package/dist/blocks/ai-files/index.d.ts +14 -0
  73. package/dist/blocks/ai-files/index.js +3 -0
  74. package/dist/blocks/ai-providers/index.d.ts +7 -0
  75. package/dist/blocks/ai-providers/index.js +211 -0
  76. package/dist/blocks/ai-tasks/index.d.ts +3 -0
  77. package/dist/blocks/ai-tasks/index.js +203 -0
  78. package/dist/blocks/announcements/index.d.ts +3 -0
  79. package/dist/blocks/announcements/index.js +3 -0
  80. package/dist/blocks/announcements/react/index.d.ts +31 -0
  81. package/dist/blocks/announcements/react/index.js +86 -0
  82. package/dist/blocks/announcements/react/server.d.ts +6 -0
  83. package/dist/blocks/announcements/react/server.js +7 -0
  84. package/dist/blocks/api-keys/index.d.ts +35 -0
  85. package/dist/blocks/api-keys/index.js +334 -0
  86. package/dist/blocks/attachments/index.d.ts +210 -0
  87. package/dist/blocks/attachments/index.js +222 -0
  88. package/dist/blocks/audit/index.d.ts +366 -0
  89. package/dist/blocks/audit/index.js +714 -0
  90. package/dist/blocks/billing/index.d.ts +265 -0
  91. package/dist/blocks/billing/index.js +400 -0
  92. package/dist/blocks/comments/index.d.ts +200 -0
  93. package/dist/blocks/comments/index.js +207 -0
  94. package/dist/blocks/connectors/index.d.ts +3 -0
  95. package/dist/blocks/connectors/index.js +164 -0
  96. package/dist/blocks/data-lifecycle/index.d.ts +251 -0
  97. package/dist/blocks/data-lifecycle/index.js +353 -0
  98. package/dist/blocks/entitlements/index.d.ts +14 -0
  99. package/dist/blocks/entitlements/index.js +25 -0
  100. package/dist/blocks/flags/index.d.ts +226 -0
  101. package/dist/blocks/flags/index.js +282 -0
  102. package/dist/blocks/inbox/index.d.ts +6 -0
  103. package/dist/blocks/inbox/index.js +499 -0
  104. package/dist/blocks/inbox/react/index.d.ts +2 -0
  105. package/dist/blocks/inbox/react/index.js +225 -0
  106. package/dist/blocks/inbox/react/server.d.ts +10 -0
  107. package/dist/blocks/inbox/react/server.js +12 -0
  108. package/dist/blocks/index.d.ts +65 -0
  109. package/dist/blocks/index.js +77 -0
  110. package/dist/blocks/jobs/index.d.ts +297 -0
  111. package/dist/blocks/jobs/index.js +1051 -0
  112. package/dist/blocks/knowledge/index.d.ts +3 -0
  113. package/dist/blocks/knowledge/index.js +3 -0
  114. package/dist/blocks/memory/index.d.ts +8 -0
  115. package/dist/blocks/memory/index.js +289 -0
  116. package/dist/blocks/notifications/index.d.ts +297 -0
  117. package/dist/blocks/notifications/index.js +425 -0
  118. package/dist/blocks/notifications/react/index.d.ts +44 -0
  119. package/dist/blocks/notifications/react/index.js +67 -0
  120. package/dist/blocks/notifications/react/server.d.ts +6 -0
  121. package/dist/blocks/notifications/react/server.js +7 -0
  122. package/dist/blocks/onboarding/index.d.ts +3 -0
  123. package/dist/blocks/onboarding/index.js +64 -0
  124. package/dist/blocks/onboarding/react/index.d.ts +28 -0
  125. package/dist/blocks/onboarding/react/index.js +78 -0
  126. package/dist/blocks/onboarding/react/server.d.ts +7 -0
  127. package/dist/blocks/onboarding/react/server.js +7 -0
  128. package/dist/blocks/organizations/index.d.ts +241 -0
  129. package/dist/blocks/organizations/index.js +400 -0
  130. package/dist/blocks/outbox/index.d.ts +3 -0
  131. package/dist/blocks/outbox/index.js +266 -0
  132. package/dist/blocks/profiles/index.d.ts +40 -0
  133. package/dist/blocks/profiles/index.js +28 -0
  134. package/dist/blocks/push/index.d.ts +185 -0
  135. package/dist/blocks/push/index.js +258 -0
  136. package/dist/blocks/settings/index.d.ts +89 -0
  137. package/dist/blocks/settings/index.js +104 -0
  138. package/dist/blocks/sso/index.d.ts +198 -0
  139. package/dist/blocks/sso/index.js +1297 -0
  140. package/dist/blocks/usage/index.d.ts +4 -0
  141. package/dist/blocks/usage/index.js +233 -0
  142. package/dist/blocks/waitlist/index.d.ts +117 -0
  143. package/dist/blocks/waitlist/index.js +132 -0
  144. package/dist/blocks/webhooks/index.d.ts +304 -0
  145. package/dist/{webhooks → blocks/webhooks}/index.js +468 -148
  146. package/dist/blocks/workflow-builder/index.d.ts +21 -0
  147. package/dist/blocks/workflow-builder/index.js +5 -0
  148. package/dist/blocks/workflow-builder/react/index.d.ts +47 -0
  149. package/dist/blocks/workflow-builder/react/index.js +119 -0
  150. package/dist/blocks/workflow-builder/react/server.d.ts +8 -0
  151. package/dist/blocks/workflow-builder/react/server.js +11 -0
  152. package/dist/blocks/workflows/index.d.ts +3 -0
  153. package/dist/blocks/workflows/index.js +3 -0
  154. package/dist/blocks/workflows/react/index.d.ts +47 -0
  155. package/dist/blocks/workflows/react/index.js +137 -0
  156. package/dist/blocks/workflows/react/server.d.ts +8 -0
  157. package/dist/blocks/workflows/react/server.js +11 -0
  158. package/dist/{index-SaTsEfGP.d.ts → bucket-Cl46E3jS.d.ts} +134 -91
  159. package/dist/{simplify-_0oUKqCd.js → build-BXIzE6Xv.js} +222 -124
  160. package/dist/{channel-FQW-CnGR.d.ts → channel-_2Mx1Oyu.d.ts} +2 -2
  161. package/dist/channels-CkgQ_X60.js +114 -0
  162. package/dist/chat-sdk/index.d.ts +303 -0
  163. package/dist/chat-sdk/index.js +733 -0
  164. package/dist/chat-sdk/react/index.d.ts +2 -0
  165. package/dist/chat-sdk/react/index.js +3 -0
  166. package/dist/chat-sdk/react/server.d.ts +3 -0
  167. package/dist/chat-sdk/react/server.js +2 -0
  168. package/dist/claims-DDBQT6BK.js +61 -0
  169. package/dist/{claims-BAf6c7is.js → claims-PqzCxaTD.js} +39 -2
  170. package/dist/cli/bin.js +1 -1
  171. package/dist/cli/{codemod-DqV7612m.js → codemod-Bl_tQpHn.js} +105 -2
  172. package/dist/cli/config-B9HkL8nF.js +2 -0
  173. package/dist/cli/config-DU7EJImt.js +49 -0
  174. package/dist/cli/config-NiPxAmUF.js +1077 -0
  175. package/dist/cli/{dist-xn4wlboc.js → dist-DRAVaE6w.js} +111 -1
  176. package/dist/cli/{doctor-L7Z8mYTx.js → doctor-B4JOm_ox.js} +992 -316
  177. package/dist/cli/{env-DmKv_G4A.js → env-CJLbUVPB.js} +1 -1
  178. package/dist/cli/{env-jIFUADLY.js → env-qXgyMV6r.js} +2 -2
  179. package/dist/cli/fresh-import-BeYf9I3x.js +40 -0
  180. package/dist/cli/gen-BGLb_zou.js +3100 -0
  181. package/dist/cli/gen-DAH8FM2W.js +2 -0
  182. package/dist/cli/index.d.ts +44 -5
  183. package/dist/cli/index.js +7 -7
  184. package/dist/cli/{init-Saf5-R9T.js → init-BIIwclPg.js} +242 -27
  185. package/dist/cli/{introspect--H7oGmcd.js → introspect-DNUTuNvb.js} +5 -5
  186. package/dist/cli/{io-k41_z-jT.js → io-DI1mTdSA.js} +12 -3
  187. package/dist/cli/{keys-ByKHnvP9.js → keys-BGCnnb-s.js} +8 -6
  188. package/dist/cli/{ohash-D7bG_EOb.js → ohash-BjQY1cBb.js} +1 -1
  189. package/dist/cli/{openapi-Cp5Fyta-.js → openapi-BlRJ18s3.js} +2 -2
  190. package/dist/cli/{project-B_GeXyHh.js → project-DZRaBaY7.js} +11 -6
  191. package/dist/cli/read-sets-CETOSFx4.js +223 -0
  192. package/dist/cli/{run-BKR2W_79.js → run-DNWxHynX.js} +33 -23
  193. package/dist/cli/{seed-CUlqWh-8.js → seed-DQzqT7LP.js} +8 -6
  194. package/dist/cli/{skills-LJJIhLFR.js → skills-QQs4q68J.js} +3 -2
  195. package/dist/cli/sql-D0GUtUPp.js +536 -0
  196. package/dist/cli/{config-CPVpXP5I.js → supabase-toml-B-bIukQF.js} +72 -942
  197. package/dist/cli/typegen-version-DeFbtzYI.js +8 -0
  198. package/dist/cli/{version-BDJuO0UR.js → version-hr88OZG0.js} +1 -1
  199. package/dist/client/index.d.ts +3 -2
  200. package/dist/client/index.js +11 -71
  201. package/dist/client/native/index.d.ts +228 -0
  202. package/dist/client/native/index.js +361 -0
  203. package/dist/client-CI0Z2zWX.js +277 -0
  204. package/dist/cloud-event-BnmD5fb9.js +46 -0
  205. package/dist/cloud-event-C1JCc1bH.d.ts +50 -0
  206. package/dist/{compiler-BXH_aZ7N.d.ts → compiler-DY_wkj4R.d.ts} +2 -2
  207. package/dist/compose-BIBNgAnq.js +53 -0
  208. package/dist/composite-Bt1YK3Ke.d.ts +146 -0
  209. package/dist/composite-DhE66P5u.js +130 -0
  210. package/dist/config/index.d.ts +6 -4
  211. package/dist/config/index.js +5 -5
  212. package/dist/{config-T_ejwyd3.d.ts → config-D44Y7PAv.d.ts} +406 -205
  213. package/dist/{config-DreERlKo.js → config-Dn7F5k9A.js} +62 -14
  214. package/dist/connector-Dv8kK0MO.d.ts +107 -0
  215. package/dist/connectors-hkLCwyEz.d.ts +120 -0
  216. package/dist/context-BCrWe7ow.d.ts +237 -0
  217. package/dist/credentials/index.d.ts +31 -0
  218. package/dist/credentials/index.js +168 -0
  219. package/dist/cron-DVPUg5k3.js +145 -0
  220. package/dist/csv-CPAzEmB6.js +25 -0
  221. package/dist/db-exception-CnWcYPxL.js +15 -0
  222. package/dist/{define-cNKzqwL_.js → define-B-TVjC25.js} +784 -227
  223. package/dist/{define-Bp_BZa5h.d.ts → define-CJJkkr1-.d.ts} +353 -61
  224. package/dist/edge/index.d.ts +69 -11
  225. package/dist/edge/index.js +191 -75
  226. package/dist/elysia/index.d.ts +59 -0
  227. package/dist/elysia/index.js +62 -0
  228. package/dist/embeddings-4ZvFzjsU.js +127 -0
  229. package/dist/embeddings-C9KGQnXt.d.ts +68 -0
  230. package/dist/{refresh-BTrQ_ZTp.d.ts → ended-jLfvw8h-.d.ts} +20 -2
  231. package/dist/{entitlements-DUxU4oHe.d.ts → entitlements-DHrY2UDZ.d.ts} +16 -7
  232. package/dist/entitlements-DRl6ZJUm.js +24 -0
  233. package/dist/envelope-DqnYGRw7.js +47 -0
  234. package/dist/{errors-DtwXa6b8.js → errors-B11Duf73.js} +82 -13
  235. package/dist/errors-DLjJHPLK.js +44 -0
  236. package/dist/escape-like-DHfx6jRr.js +7 -0
  237. package/dist/escape-like-ImTK0ps_.d.ts +15 -0
  238. package/dist/eve/index.d.ts +220 -0
  239. package/dist/eve/index.js +504 -0
  240. package/dist/eve-gT2Fpjut.d.ts +151 -0
  241. package/dist/events/index.d.ts +4 -3
  242. package/dist/events/index.js +9 -50
  243. package/dist/events-DWDhx77e.d.ts +549 -0
  244. package/dist/executor-Bq28caBo.js +718 -0
  245. package/dist/executor-C-R4pucm.js +83 -0
  246. package/dist/executor-CaWigTyR.d.ts +148 -0
  247. package/dist/executor-D14tGopJ.d.ts +36 -0
  248. package/dist/{executor-Cghdstwu.d.ts → executor-DbvExCFC.d.ts} +7 -1
  249. package/dist/{sql-Coh6n4cC.js → executor-De1Of3m3.js} +210 -11
  250. package/dist/executor-DvsBbNBS.d.ts +261 -0
  251. package/dist/expo/index.d.ts +79 -0
  252. package/dist/expo/index.js +129 -0
  253. package/dist/expo-sqlite/index.d.ts +58 -0
  254. package/dist/expo-sqlite/index.js +104 -0
  255. package/dist/field-errors-BFOa7WhB.d.ts +99 -0
  256. package/dist/field-errors-VF1yb8yI.js +13 -0
  257. package/dist/framework-CONDyPYx.js +51 -0
  258. package/dist/framework-DuVb4Xa8.d.ts +25 -0
  259. package/dist/gateway-C1ssRHnf.d.ts +130 -0
  260. package/dist/graph-BGyLLFLX.js +265 -0
  261. package/dist/h3/index.d.ts +59 -0
  262. package/dist/h3/index.js +55 -0
  263. package/dist/h3/v1/index.d.ts +63 -0
  264. package/dist/h3/v1/index.js +49 -0
  265. package/dist/history-BZih6SFP.js +64 -0
  266. package/dist/hono/index.d.ts +56 -7
  267. package/dist/hono/index.js +97 -45
  268. package/dist/{react-C_s7kiNz.js → hooks-1BTCJsiw.js} +104 -133
  269. package/dist/http-Cv4T29xh.js +40 -0
  270. package/dist/http-DdYadv-o.js +126 -0
  271. package/dist/image-url-pIVlO6R1.js +41 -0
  272. package/dist/impersonation-DcqaTBHx.js +148 -0
  273. package/dist/inbox-i7E1ppo6.d.ts +384 -0
  274. package/dist/index-ACiNPN4Z.d.ts +74 -0
  275. package/dist/{index-DgILJRXj.d.ts → index-Bepi-Hgg.d.ts} +91 -28
  276. package/dist/index-BkWT_uBO.d.ts +51 -0
  277. package/dist/index-BpFYMsi0.d.ts +53 -0
  278. package/dist/{index-C7f8cOBM.d.ts → index-Bxih3l0u.d.ts} +2 -2
  279. package/dist/index-CaxrMD1A.d.ts +1 -0
  280. package/dist/index-ClmjK_o-.d.ts +55 -0
  281. package/dist/index-CtuakVRc.d.ts +267 -0
  282. package/dist/index-D48jVS-N.d.ts +246 -0
  283. package/dist/index-DDrYaUcq.d.ts +138 -0
  284. package/dist/index-DQh4VCc9.d.ts +98 -0
  285. package/dist/{live-D9W2M5aO.d.ts → index-DunNRdnT.d.ts} +136 -38
  286. package/dist/index.d.ts +65 -18
  287. package/dist/index.js +42 -14
  288. package/dist/invalidate-BBqhpxyB.d.ts +19 -0
  289. package/dist/json-CEnpTHlZ.js +16 -0
  290. package/dist/json-schema-CvER4kgT.js +502 -0
  291. package/dist/keys-4MnkWTTh.js +35 -0
  292. package/dist/kit-B5tid-q5.d.ts +60 -0
  293. package/dist/kit-Fm-Fv7q5.js +78 -0
  294. package/dist/knowledge-BXBbT0Tr.d.ts +176 -0
  295. package/dist/knowledge-CDmiMLew.js +255 -0
  296. package/dist/lint/index.d.ts +1 -1
  297. package/dist/lint/index.js +37 -0
  298. package/dist/list/index.d.ts +3 -2
  299. package/dist/list/index.js +1 -444
  300. package/dist/{index-fag8VJZ2.d.ts → list-query-BRt-zDF7.d.ts} +20 -12
  301. package/dist/list-query-gl808ac1.js +459 -0
  302. package/dist/{live-CdJBOc4f.js → live-CTAZQkwl.js} +99 -14
  303. package/dist/logger-DWVYUmwi.d.ts +18 -0
  304. package/dist/mcp/index.d.ts +38 -11
  305. package/dist/mcp/index.js +82 -46
  306. package/dist/mcp/sdk/index.d.ts +105 -0
  307. package/dist/mcp/sdk/index.js +126 -0
  308. package/dist/message-CaKlqdsX.js +219 -0
  309. package/dist/message-CfDoR0Y6.d.ts +94 -0
  310. package/dist/messages-B9-5887d.js +715 -0
  311. package/dist/messages-DYP0sUTe.d.ts +59 -0
  312. package/dist/{mfa-CusDgPaD.d.ts → mfa-Daak8ukG.d.ts} +8 -2
  313. package/dist/modules-DpPwzC7E.d.ts +192 -0
  314. package/dist/modules-dxrVK3ID.js +228 -0
  315. package/dist/nestjs/index.d.ts +68 -0
  316. package/dist/nestjs/index.js +164 -0
  317. package/dist/next/client/index.d.ts +35 -0
  318. package/dist/next/client/index.js +36 -0
  319. package/dist/next/image/index.js +3 -24
  320. package/dist/next/index.d.ts +150 -51
  321. package/dist/next/index.js +261 -107
  322. package/dist/node/index.d.ts +4 -0
  323. package/dist/node/index.js +210 -0
  324. package/dist/node-headers-AO06VhqH.d.ts +24 -0
  325. package/dist/node-headers-C71zNQHe.js +55 -0
  326. package/dist/nuxt/index.d.ts +60 -0
  327. package/dist/nuxt/index.js +64 -0
  328. package/dist/onboarding-BZGHYJks.d.ts +62 -0
  329. package/dist/openapi/index.d.ts +1 -1
  330. package/dist/openapi/index.js +3 -3
  331. package/dist/orpc/index.d.ts +70 -11
  332. package/dist/orpc/index.js +73 -24
  333. package/dist/otel/index.d.ts +7 -7
  334. package/dist/otel/index.js +87 -57
  335. package/dist/outbox-Cq7pPYvl.d.ts +161 -0
  336. package/dist/{plugin-o144f322.d.ts → plugin-FGY8UhYm.d.ts} +30 -10
  337. package/dist/plugin-tfXW1-qO.js +45 -0
  338. package/dist/plugins/actor/index.d.ts +2 -2
  339. package/dist/plugins/actor/index.js +3 -3
  340. package/dist/plugins/rules/index.d.ts +11 -4
  341. package/dist/plugins/rules/index.js +40 -13
  342. package/dist/plugins/soft-delete/index.d.ts +5 -4
  343. package/dist/plugins/soft-delete/index.js +10 -5
  344. package/dist/plugins/tenant/index.d.ts +2 -2
  345. package/dist/plugins/tenant/index.js +18 -11
  346. package/dist/plugins/timestamps/index.d.ts +5 -3
  347. package/dist/plugins/timestamps/index.js +6 -4
  348. package/dist/plugins/validation/index.d.ts +2 -2
  349. package/dist/plugins/validation/index.js +10 -6
  350. package/dist/{pool-C9voM4Kw.d.ts → pool-CAu2nLrL.d.ts} +2 -2
  351. package/dist/postgres/index.d.ts +4 -4
  352. package/dist/postgres/index.js +1 -2
  353. package/dist/{postgrest-CruYKAvV.d.ts → postgrest-BLVdEnfe.d.ts} +13 -3
  354. package/dist/powersync/index.d.ts +43 -0
  355. package/dist/powersync/index.js +199 -0
  356. package/dist/powersync/react/index.d.ts +87 -0
  357. package/dist/powersync/react/index.js +108 -0
  358. package/dist/{problem-BW1KhzSG.js → problem-BreOl8b8.js} +14 -3
  359. package/dist/{problem-Blxe8S31.d.ts → problem-DD8LZFjc.d.ts} +21 -3
  360. package/dist/provider-BH5UWZJ6.d.ts +113 -0
  361. package/dist/provider-Di3sRutW.js +57 -0
  362. package/dist/query/index.d.ts +4 -2
  363. package/dist/query/index.js +4 -3
  364. package/dist/{query-CCbo44lG.js → query-BQ-NaZon.js} +141 -24
  365. package/dist/{queue-BYUCjr59.d.ts → queue-CLJurhdy.d.ts} +258 -83
  366. package/dist/react/index.d.ts +11 -7
  367. package/dist/react/index.js +7 -3
  368. package/dist/react/native/index.d.ts +116 -0
  369. package/dist/react/native/index.js +130 -0
  370. package/dist/react/server.d.ts +28 -10
  371. package/dist/react/server.js +22 -5
  372. package/dist/react/session.d.ts +2 -2
  373. package/dist/react-4ZqkP8da.js +79 -0
  374. package/dist/react-F80mF4-t.js +409 -0
  375. package/dist/react-router/index.d.ts +83 -0
  376. package/dist/react-router/index.js +89 -0
  377. package/dist/react-topic-seAWjL3_.js +38 -0
  378. package/dist/{read-set-DQFt1N_Y.js → read-set-DuKWC9Mj.js} +67 -25
  379. package/dist/realtime/index.d.ts +4 -5
  380. package/dist/realtime/index.js +144 -82
  381. package/dist/refusal-CeJWxmkH.js +61 -0
  382. package/dist/refusal-D1rgbzNq.d.ts +15 -0
  383. package/dist/replicas-CwrYp5Zj.js +94 -0
  384. package/dist/{view-Bq64ki8-.js → resolve-D_IcnvFd.js} +239 -289
  385. package/dist/{resolve-C15TJq77.d.ts → resolve-KW8nCeL6.d.ts} +29 -45
  386. package/dist/{resource-CRxxwkQq.js → resource-BsvzCMlX.js} +4 -4
  387. package/dist/{resource-D8iqWMr-.d.ts → resource-D6Uc7Sk7.d.ts} +5 -5
  388. package/dist/respond-BUgsXNgk.js +91 -0
  389. package/dist/respond-DoBijysA.d.ts +93 -0
  390. package/dist/result-D7y2fT87.d.ts +282 -0
  391. package/dist/{result-BKiliPY7.js → result-DzUbqgdW.js} +27 -2
  392. package/dist/run-state-CPo-1X2B.d.ts +12 -0
  393. package/dist/run-state-CgBKzYMW.js +13 -0
  394. package/dist/search-CUWCRYKL.js +9 -0
  395. package/dist/server/index.d.ts +143 -21
  396. package/dist/server/index.js +46 -14
  397. package/dist/{respond-D2OQl62-.d.ts → server-CeVeeXwz.d.ts} +225 -80
  398. package/dist/session-ChiXDZdZ.d.ts +72 -0
  399. package/dist/shared-CBxosKK3.js +75 -0
  400. package/dist/{shared-D1dRUrAg.js → shared-CxWmcyqB.js} +2 -1
  401. package/dist/shared-DDSjEGDR.d.ts +11 -0
  402. package/dist/sign-in-BCV5S2WZ.d.ts +49 -0
  403. package/dist/sign-in-Cb1mwv6X.js +86 -0
  404. package/dist/{signers-Cc6r98SW.d.ts → signers-4y62_VIi.d.ts} +13 -9
  405. package/dist/simplify-DDO0j0LI.js +83 -0
  406. package/dist/solid/index.d.ts +131 -0
  407. package/dist/solid/index.js +344 -0
  408. package/dist/solid-start/index.d.ts +75 -0
  409. package/dist/solid-start/index.js +58 -0
  410. package/dist/{spec-pins-C3oc-Tdp.js → spec-pins--j6mTok4.js} +8 -1
  411. package/dist/{spec-pins-CqorWDnO.d.ts → spec-pins-C89s6DyW.d.ts} +7 -0
  412. package/dist/sql/index.d.ts +330 -194
  413. package/dist/sql/index.js +34901 -6489
  414. package/dist/ssr/index.d.ts +6 -5
  415. package/dist/ssr/index.js +3 -3
  416. package/dist/{standard-D7r6dMUu.js → standard-BK0cqJ7y.js} +4 -3
  417. package/dist/{standard-J4YgMOLm.d.ts → standard-CYsm7xpT.d.ts} +1 -1
  418. package/dist/stats-D_AD9GGu.js +1123 -0
  419. package/dist/storage/index.d.ts +5 -5
  420. package/dist/storage/index.js +1027 -368
  421. package/dist/store-BdH5ruDx.js +66 -0
  422. package/dist/store-CGjgWu5n.d.ts +68 -0
  423. package/dist/streams/index.d.ts +76 -0
  424. package/dist/streams/index.js +77 -0
  425. package/dist/streams/redis/index.d.ts +52 -0
  426. package/dist/streams/redis/index.js +185 -0
  427. package/dist/stripe-BMj5LtsT.js +38 -0
  428. package/dist/stripe-D04h-QBT.d.ts +136 -0
  429. package/dist/{support-Dk6vdmEw.js → support-BivNqSpK.js} +35 -12
  430. package/dist/{support-view-Da5peKFg.d.ts → support-view-33Oi07TT.d.ts} +1 -1
  431. package/dist/svelte/index.d.ts +114 -0
  432. package/dist/svelte/index.js +344 -0
  433. package/dist/sveltekit/index.d.ts +116 -0
  434. package/dist/sveltekit/index.js +106 -0
  435. package/dist/tags-B99_U9Pp.js +39 -0
  436. package/dist/tags-Cx-LnIQP.d.ts +30 -0
  437. package/dist/tanstack-db/index.d.ts +71 -0
  438. package/dist/tanstack-db/index.js +72 -0
  439. package/dist/tanstack-start/index.d.ts +75 -0
  440. package/dist/tanstack-start/index.js +95 -0
  441. package/dist/tee-CoEppCER.js +101 -0
  442. package/dist/{template-TxrGI5jR.js → template--jDkl3UP.js} +34 -13
  443. package/dist/template-CwO38Do8.d.ts +6 -0
  444. package/dist/temporal-BJGitm-h.js +79 -0
  445. package/dist/{temporal-required-CAt4Dc9Z.js → temporal-required-BVvW7SYJ.js} +3 -2
  446. package/dist/tenant-I1TEZ_BX.js +27 -0
  447. package/dist/tenant-icPeuUBN.d.ts +17 -0
  448. package/dist/testing/index.d.ts +343 -37
  449. package/dist/testing/index.js +1186 -79
  450. package/dist/timing-CyTQPubY.js +92 -0
  451. package/dist/ttl-Hr34gRu8.js +12 -0
  452. package/dist/{types-Dnf_wRDz.d.ts → types-6BdhkmZe.d.ts} +111 -45
  453. package/dist/types-BI-0Sl2v.d.ts +359 -0
  454. package/dist/types-C05bxW-W.d.ts +220 -0
  455. package/dist/types-DGs5L0VN.d.ts +192 -0
  456. package/dist/types-TaiEeBGA.d.ts +156 -0
  457. package/dist/usage-CrvrL2vw.d.ts +177 -0
  458. package/dist/user-change-XzvgafU4.js +130 -0
  459. package/dist/vault-CSO7ss5C.d.ts +50 -0
  460. package/dist/vercel-connect/index.d.ts +47 -0
  461. package/dist/vercel-connect/index.js +119 -0
  462. package/dist/{verify-Ce49ETPz.js → verify-DL41hbvY.js} +85 -13
  463. package/dist/verify-DPuWngD4.d.ts +172 -0
  464. package/dist/{version-DM_Roffb.js → version-Bvv6aLjZ.js} +1 -1
  465. package/dist/view-BeFcRV6G.js +99 -0
  466. package/dist/{view-BEf0diC5.d.ts → view-DbxLNu8L.d.ts} +35 -32
  467. package/dist/vue/index.d.ts +141 -0
  468. package/dist/vue/index.js +362 -0
  469. package/dist/watch-DI34G86j.d.ts +60 -0
  470. package/dist/watch-Xuxrvxq-.js +122 -0
  471. package/dist/{wire-D2dT86vi.js → wire-DtZQ4sdE.js} +15 -5
  472. package/dist/workflow-builder-DJ1oHn8g.js +398 -0
  473. package/dist/workflow-sdk/builder/index.d.ts +85 -0
  474. package/dist/workflow-sdk/builder/index.js +250 -0
  475. package/dist/workflow-sdk/index.d.ts +14 -0
  476. package/dist/workflow-sdk/index.js +3 -0
  477. package/dist/workflow-sdk/world/index.d.ts +107 -0
  478. package/dist/workflow-sdk/world/index.js +702 -0
  479. package/dist/workflow-sdk-B3yLD6Br.d.ts +98 -0
  480. package/dist/workflow-sdk-C2WJ_G2O.js +173 -0
  481. package/dist/workflow-sdk-world-D-prir6O.js +1397 -0
  482. package/dist/workflows-B0j9WKPu.d.ts +185 -0
  483. package/dist/workflows-wu1WWBn7.js +216 -0
  484. package/package.json +470 -29
  485. package/schemas/ai-message-v1.json +258 -0
  486. package/schemas/config-v1.json +1074 -140
  487. package/schemas/doctor-report-v1.json +21 -1
  488. package/schemas/snapshot-v2.json +8 -0
  489. package/skills/better-supabase/SKILL.md +41 -12
  490. package/skills/better-supabase/references/frontend.md +96 -0
  491. package/skills/better-supabase/references/plugins.md +10 -6
  492. package/skills/better-supabase/references/troubleshooting.md +2 -1
  493. package/skills/better-supabase-api/SKILL.md +76 -22
  494. package/skills/better-supabase-api/references/adapters.md +207 -0
  495. package/skills/better-supabase-api/references/ai.md +125 -0
  496. package/skills/better-supabase-api/references/expo.md +65 -0
  497. package/skills/better-supabase-api/references/powersync.md +35 -0
  498. package/skills/better-supabase-api/references/streams-credentials.md +105 -0
  499. package/skills/better-supabase-auth/SKILL.md +62 -18
  500. package/skills/better-supabase-auth/references/authorization-providers.md +51 -0
  501. package/skills/better-supabase-testing/SKILL.md +3 -1
  502. package/dist/cli/config-dtoekM0v.js +0 -2
  503. package/dist/cli/gen-BJc9vdyu.js +0 -2
  504. package/dist/cli/gen-C2osRcr5.js +0 -2204
  505. package/dist/cli/read-sets-BfMQcKy8.js +0 -289
  506. package/dist/cli/sql-DzPbfngx.js +0 -348
  507. package/dist/entitlements-CTEBm7IB.js +0 -20
  508. package/dist/events-aIO7vsIk.d.ts +0 -230
  509. package/dist/executor-BunPOO-k.d.ts +0 -402
  510. package/dist/executor-XycESQPH.js +0 -94
  511. package/dist/impersonation-VfaGc4Q_.js +0 -41
  512. package/dist/index-BGdgBPdf.d.ts +0 -161
  513. package/dist/index-DOESKG27.d.ts +0 -100
  514. package/dist/index-DmXSxbLi.d.ts +0 -62
  515. package/dist/index-Dxn2a5cw.d.ts +0 -50
  516. package/dist/jobs/index.d.ts +0 -226
  517. package/dist/jobs/index.js +0 -1007
  518. package/dist/json-schema-m1fiwKgN.js +0 -208
  519. package/dist/kit-events-CTFDfSwb.js +0 -60
  520. package/dist/kit-transport-B82k1djG.d.ts +0 -33
  521. package/dist/kits-CGLLrNPd.js +0 -157
  522. package/dist/notifications/index.d.ts +0 -162
  523. package/dist/notifications/index.js +0 -264
  524. package/dist/orgs/index.d.ts +0 -132
  525. package/dist/orgs/index.js +0 -245
  526. package/dist/permdock-sql-C2Inc6Xc.d.ts +0 -29
  527. package/dist/permdock-sql-DgOfeixi.js +0 -51
  528. package/dist/plugin-DwARMuQp.js +0 -59
  529. package/dist/server-Csx2sRjg.js +0 -655
  530. package/dist/stats-Bqob3WqT.js +0 -592
  531. package/dist/support-DT-OhSxD.d.ts +0 -88
  532. package/dist/template-mbvlysOo.d.ts +0 -6
  533. package/dist/temporal-CVlIV2DZ.js +0 -40
  534. package/dist/user-change-CHFEUro1.js +0 -49
  535. package/dist/webhooks/index.d.ts +0 -285
  536. package/skills/better-supabase-auth/references/permdock.md +0 -100
@@ -0,0 +1,2 @@
1
+ import { n as genCommand } from "./gen-BGLb_zou.js";
2
+ export { genCommand };
@@ -1,7 +1,6 @@
1
1
  import { styleText } from "node:util";
2
- import { Catalog, CatalogCheck, CatalogColumn, CatalogColumnGrant, CatalogEnum, CatalogForeignKey, CatalogFunction, CatalogFunctionArg, CatalogGrant, CatalogIndex, CatalogPolicy, CatalogTable, CatalogTrigger, CatalogUnique, ExtrasFunction, ExtrasHook, ExtrasHookFunction, ExtrasTable, ForeignKeyAction, GeneratedFile, GeneratorMetadata, ResolvedConfig, Snapshot, SnapshotBucket, SnapshotExtras } from "better-supabase/config";
2
+ import { Catalog, CatalogCheck, CatalogColumn, CatalogColumnGrant, CatalogEnum, CatalogForeignKey, CatalogFunction, CatalogFunctionArg, CatalogGrant, CatalogIndex, CatalogPolicy, CatalogTable, CatalogTrigger, CatalogUnique, ExtrasFunction, ExtrasHook, ExtrasHookFunction, ExtrasTable, ForeignKeyAction, GeneratedFile, GeneratorMetadata, GeneratorMetadata as GeneratorMetadata$1, ResolvedConfig, Snapshot, SnapshotBucket, SnapshotExtras } from "better-supabase/config";
3
3
  import { Casing, Codec, FunctionMeta, RelationMeta, SchemaMeta, TableMeta } from "better-supabase";
4
- import { GeneratorMetadata as GeneratorMetadata$1, Queryable } from "@supabase/postgrest-typegen";
5
4
  //#region ../../node_modules/.pnpm/citty@0.2.2/node_modules/citty/dist/index.d.mts
6
5
  //#region src/types.d.ts
7
6
  type ArgType = "boolean" | "string" | "enum" | "positional" | undefined;
@@ -148,6 +147,10 @@ interface CommandResult {
148
147
  interface CliContext {
149
148
  readonly cwd: string;
150
149
  readonly config: ResolvedConfig;
150
+ /** The config file `config` came from, when there is one. */
151
+ readonly configFile?: string;
152
+ /** Loads the config file again, for commands that run until stopped. */
153
+ readonly reloadConfig?: () => Promise<ResolvedConfig>;
151
154
  /** `prompts` is unset in CI and under `--json` or `--yes`. */
152
155
  readonly io: CliIo;
153
156
  readonly env: CliEnv;
@@ -298,6 +301,14 @@ interface PgConnection {
298
301
  /** Opens a `pg` connection. `pg` is an optional peer, loaded on demand. */
299
302
  declare function connect(url: string, load?: () => Promise<unknown>, options?: ConnectOptions): Promise<PgConnection>;
300
303
  //#endregion
304
+ //#region src/cli/introspect/typegen.d.ts
305
+ /** A connection `introspect()` reads the catalog through, as postgrest-typegen types it. */
306
+ interface Queryable {
307
+ query(sql: string): Promise<{
308
+ rows: any[];
309
+ }>;
310
+ }
311
+ //#endregion
301
312
  //#region src/cli/introspect/source.d.ts
302
313
  /** A connection introspection can query, plus how to release it. */
303
314
  interface IntrospectionSource {
@@ -358,13 +369,25 @@ interface GenOptions extends SnapshotSource {
358
369
  readonly paint?: Paint;
359
370
  /** Pre-loaded snapshot (tests, watch mode). */
360
371
  readonly snapshot?: Snapshot;
372
+ /**
373
+ * Writes only the generated files (`gen --metadata --out`): no read-set SQL
374
+ * module, and the manifest that removes files an earlier run wrote is
375
+ * neither read nor written.
376
+ */
377
+ readonly isolated?: boolean;
378
+ }
379
+ interface RenderOptions {
380
+ /** Where the generated module imports the runtime from. Defaults to `better-supabase`. */
381
+ readonly runtimeImport?: string;
382
+ /** Writes the metadata into the main module, so it stands alone on stdout. */
383
+ readonly inlineMeta?: boolean;
361
384
  }
362
385
  /**
363
386
  * Renders every generated file for a snapshot, without touching disk:
364
387
  * `database.types.ts` (what `supabase gen types` prints), the main module,
365
388
  * then each configured generator's files.
366
389
  */
367
- export declare function renderFiles(config: ResolvedConfig, snapshot: Snapshot): Promise<GeneratedFile[]>;
390
+ export declare function renderFiles(config: ResolvedConfig, snapshot: Snapshot, options?: RenderOptions): Promise<GeneratedFile[]>;
368
391
  export declare function runGen(options: GenOptions): Promise<CommandResult>;
369
392
  //#endregion
370
393
  //#region src/cli/introspect/extras.d.ts
@@ -405,6 +428,8 @@ interface ColumnModel {
405
428
  readonly nullable: boolean;
406
429
  /** Optional on insert. */
407
430
  readonly optional: boolean;
431
+ /** An insert may leave it out: a default, `insertOptional`, or a CHECK-narrowed column a `before insert` trigger can fill. */
432
+ readonly filled: boolean;
408
433
  /** Not writable (generated always / identity always). */
409
434
  readonly readonly: boolean;
410
435
  readonly values: readonly string[] | undefined;
@@ -417,6 +442,11 @@ interface ColumnModel {
417
442
  }
418
443
  interface RelationModel {
419
444
  readonly name: string;
445
+ /** The name before casing, from database names. */
446
+ readonly base: string;
447
+ /** Database names of the foreign key's columns and the ones it references. */
448
+ readonly fkColumns: readonly string[];
449
+ readonly refColumns: readonly string[];
420
450
  readonly meta: RelationMeta;
421
451
  }
422
452
  interface TableModel {
@@ -430,8 +460,12 @@ interface TableModel {
430
460
  interface EnumModel {
431
461
  readonly schema: string;
432
462
  readonly name: string;
463
+ /** Key in `meta.enums`: the name, or `schema_name` when another schema has the same enum name. */
464
+ readonly key: string;
433
465
  /** Constant name for the value array, e.g. `noteKindValues`. */
434
466
  readonly constant: string;
467
+ /** Exported type name, e.g. `NoteKind`. */
468
+ readonly typeName: string;
435
469
  readonly values: readonly string[];
436
470
  }
437
471
  interface FunctionModel {
@@ -459,6 +493,8 @@ interface Model {
459
493
  readonly catalog: Catalog;
460
494
  /** Typegen metadata restricted to the configured schemas. */
461
495
  readonly introspection: GeneratorMetadata$1;
496
+ /** Config entries that matched nothing in the schema. */
497
+ readonly warnings: readonly string[];
462
498
  }
463
499
  /** Builds the codegen model from a snapshot and config. */
464
500
  export declare function buildModel(snapshot: Snapshot, config: ResolvedConfig): Model;
@@ -474,6 +510,8 @@ interface EmitOptions {
474
510
  readonly importPathFor: (from: string) => string;
475
511
  /** Import path from the generated module to the metadata module (`emitMeta`). */
476
512
  readonly metaImport?: string;
513
+ /** Writes the metadata into the module instead of importing it, so it is one file. */
514
+ readonly inlineMeta?: boolean;
477
515
  }
478
516
  /** Renders the generated module. */
479
517
  export declare function emitModule(model: Model, options: EmitOptions): string;
@@ -483,11 +521,12 @@ export declare function emitModule(model: Model, options: EmitOptions): string;
483
521
  * Loads `better-supabase.config.*` with c12 and checks it against the config
484
522
  * schema. c12 imports `.ts` natively (Node 24 strips the types), so no
485
523
  * loader is needed; rc files, `package.json`, env overrides and `extends`
486
- * are off so the one file is the whole config.
524
+ * are off so the one file is the whole config. A discovered file sets the
525
+ * project root to its own directory; `--config` keeps `cwd` as the root.
487
526
  */
488
527
  export declare function loadConfig(cwd: string, explicit?: string): Promise<ResolvedConfig>;
489
528
  //#endregion
490
529
  //#region src/cli/version.d.ts
491
- export declare const VERSION = "0.5.0";
530
+ export declare const VERSION = "0.6.0";
492
531
  //#endregion
493
532
  export type { Catalog, CatalogCheck, CatalogColumn, CatalogColumnGrant, CatalogEnum, CatalogForeignKey, CatalogFunction, CatalogFunctionArg, CatalogGrant, CatalogIndex, CatalogPolicy, CatalogTable, CatalogTrigger, CatalogUnique, CliArgs, CliCommandDef, CliContext, CliEnv, CliErrorCode, CliErrorOptions, CliIo, CliProblem, CliProblemExtensions, Command, CommandContext, CommandResult, ExitCode, ExtrasFunction, ExtrasHook, ExtrasHookFunction, ExtrasTable, ForeignKeyAction, GeneratorMetadata, IntrospectionSource, ManagementSourceOptions, ParsedArgs, Queryable, RunOptions, RunResult, Snapshot, SnapshotBucket, SnapshotExtras };
package/dist/cli/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import { a as list, r as defineCliCommand } from "./command-CK14fP91.js";
2
2
  import { n as CliError, t as CLI_ERRORS_URL } from "./errors-4v4DTtda.js";
3
- import { i as run, n as help, r as registerCommand, t as commandNames } from "./run-BKR2W_79.js";
4
- import { t as VERSION } from "./version-BDJuO0UR.js";
5
- import { a as loadConfig } from "./config-CPVpXP5I.js";
6
- import { A as toCatalog, b as emitModule, f as introspect, g as buildModel, i as runGen, l as parseSnapshot, m as pgSource, o as loadSnapshot, p as managementSource, r as renderFiles, u as serializeSnapshot, y as GENERATED_HEADER } from "./gen-C2osRcr5.js";
3
+ import { i as run, n as help, r as registerCommand, t as commandNames } from "./run-DNWxHynX.js";
4
+ import { t as VERSION } from "./version-hr88OZG0.js";
5
+ import { a as loadConfig } from "./config-NiPxAmUF.js";
6
+ import { L as toCatalog, a as renderFiles, b as emitModule, c as loadSnapshot, d as parseSnapshot, f as serializeSnapshot, g as pgSource, h as managementSource, m as introspect, o as runGen, x as buildModel, y as GENERATED_HEADER } from "./gen-BGLb_zou.js";
7
7
  //#region src/cli/introspect/from-catalog.ts
8
8
  /**
9
9
  * Builds a snapshot from catalog records: the inverse of `toCatalog`. Tests
@@ -124,12 +124,12 @@ function fromCatalog(catalog) {
124
124
  const args = [...fn.args.map((arg) => ({
125
125
  mode: "in",
126
126
  name: arg.name,
127
- type_id: argType(fn.schema, arg.isArray ? `_${arg.udt}` : arg.udt),
127
+ type_id: argType(arg.typeSchema ?? fn.schema, arg.isArray ? `_${arg.udt}` : arg.udt),
128
128
  has_default: arg.hasDefault
129
129
  })), ...(fn.returnsTable ?? []).map((entry) => ({
130
130
  mode: "table",
131
131
  name: entry.name,
132
- type_id: argType(fn.schema, entry.udt),
132
+ type_id: argType(entry.typeSchema ?? fn.schema, entry.udt),
133
133
  has_default: false
134
134
  }))];
135
135
  meta.functions.push({
@@ -142,7 +142,7 @@ function fromCatalog(catalog) {
142
142
  args,
143
143
  argument_types: fn.signature,
144
144
  identity_argument_types: fn.signature,
145
- return_type_id: fn.returnsRelation ? typeId(fn.returnsRelation.split(".")[0], fn.returns) : argType(fn.schema, fn.returns),
145
+ return_type_id: fn.returnsRelation ? typeId(fn.returnsRelation.split(".")[0], fn.returns) : argType(fn.returnsSchema ?? fn.schema, fn.returns),
146
146
  return_type: fn.returns,
147
147
  return_type_relation_id: fn.returnsRelation ? relationIds.get(fn.returnsRelation) ?? null : null,
148
148
  is_set_returning_function: fn.returnsSet,
@@ -1,16 +1,20 @@
1
1
  import { a as list, r as defineCliCommand } from "./command-CK14fP91.js";
2
- import { r as writeIfChanged, t as display } from "./io-k41_z-jT.js";
3
- import { t as VERSION } from "./version-BDJuO0UR.js";
4
- import { n as findConfig } from "./config-CPVpXP5I.js";
5
- import { n as installCommand, t as detectProject } from "./project-B_GeXyHh.js";
6
- import { posix, resolve } from "node:path";
2
+ import { i as writeIfChanged, t as display } from "./io-DI1mTdSA.js";
3
+ import { t as VERSION } from "./version-hr88OZG0.js";
4
+ import { a as loadConfig, r as findConfig } from "./config-NiPxAmUF.js";
5
+ import { a as findSupabaseRoot, p as tomlGet, r as diffEngine, t as PGDELTA_TABLE, u as readSupabaseToml } from "./supabase-toml-B-bIukQF.js";
6
+ import { t as TYPEGEN_VERSION } from "./typegen-version-DeFbtzYI.js";
7
+ import { n as installCommand, t as detectProject } from "./project-DZRaBaY7.js";
8
+ import { join, posix, resolve } from "node:path";
7
9
  import { existsSync } from "node:fs";
10
+ import { glob, readFile } from "node:fs/promises";
8
11
  //#region src/cli/templates.ts
9
12
  const INTEGRATIONS = [
10
13
  "next",
11
14
  "hono",
12
15
  "orpc",
13
16
  "edge",
17
+ "expo",
14
18
  "mcp",
15
19
  "client",
16
20
  "react"
@@ -87,15 +91,16 @@ export default defineConfig({
87
91
  if (!lib) return [config];
88
92
  const path = libEntry(context);
89
93
  const generated = importFrom(context, path, context.generated);
94
+ const expo = context.frameworks.includes("expo");
90
95
  return [config, {
91
96
  path,
92
97
  contents: `import { defineSupabase } from 'better-supabase';
93
-
98
+ ${expo ? "import { Temporal } from 'temporal-polyfill';\n" : ""}
94
99
  import { schema } from '${generated}';
95
100
 
96
101
  export type { Functions, Models } from '${generated}';
97
102
 
98
- export const betterSupabase = defineSupabase(schema);
103
+ export const betterSupabase = defineSupabase(schema${expo ? ", { temporal: Temporal }" : ""});
99
104
  `
100
105
  }];
101
106
  }
@@ -275,6 +280,64 @@ Deno.serve(bs.handler((_request, { auth }) => ({ kind: auth.kind })));
275
280
  ],
276
281
  next: ["Serve it locally with `supabase functions serve api`."]
277
282
  },
283
+ expo: {
284
+ description: "Expo Router server loaders, API routes and middleware, and a native client",
285
+ requires: ["client"],
286
+ packages: [
287
+ "expo-server",
288
+ "expo-secure-store",
289
+ "@supabase/supabase-js",
290
+ "temporal-polyfill"
291
+ ],
292
+ files: (context) => {
293
+ const server = join$1(supabaseDir(context), "expo.ts");
294
+ const native = join$1(supabaseDir(context), "client.native.ts");
295
+ const middleware = join$1(context.srcDir, "app", "+middleware.ts");
296
+ const env = publicEnv(context);
297
+ return [
298
+ {
299
+ path: server,
300
+ contents: `import { createExpo } from 'better-supabase/expo';
301
+
302
+ import { betterSupabase } from '${importLib(context, server)}';
303
+
304
+ export const bs = createExpo(betterSupabase);
305
+ `
306
+ },
307
+ {
308
+ path: native,
309
+ contents: `import { createClient as createSupabaseClient } from '@supabase/supabase-js';
310
+ import { autoRefreshOnForeground, createNativeClient, secureStorage } from 'better-supabase/client/native';
311
+ import * as SecureStore from 'expo-secure-store';
312
+ import { AppState } from 'react-native';
313
+
314
+ import { betterSupabase } from '${importLib(context, native)}';
315
+
316
+ const supabase = createSupabaseClient(${env.url}, ${env.key}, {
317
+ auth: {
318
+ storage: secureStorage(SecureStore),
319
+ autoRefreshToken: true,
320
+ persistSession: true,
321
+ detectSessionInUrl: false,
322
+ },
323
+ });
324
+
325
+ autoRefreshOnForeground(supabase, AppState);
326
+
327
+ export const bs = createNativeClient(betterSupabase, supabase);
328
+ `
329
+ },
330
+ {
331
+ path: middleware,
332
+ contents: `import { bs } from '${importFrom(context, middleware, server)}';
333
+
334
+ export default bs.middleware();
335
+ `
336
+ }
337
+ ];
338
+ },
339
+ next: ["Load data as the caller with `export const loader = bs.loader((ctx) => ctx.db.customers.findMany())`.", "Metro picks `client.native.ts` on iOS and Android and `client.ts` (cookie sessions) on the web."]
340
+ },
278
341
  mcp: {
279
342
  description: "An MCP server (Streamable HTTP) as an Edge Function",
280
343
  requires: [],
@@ -303,7 +366,7 @@ Deno.serve(bs.fetch);
303
366
  contents: denoJson(context)
304
367
  }
305
368
  ],
306
- next: ["List tables under `resources` to expose them as tools, e.g. `customers: true`."]
369
+ next: ["List tables under `resources` to expose them as tools, e.g. `customers: true`.", "Add `[functions.mcp] verify_jwt = false` and `[auth.oauth_server] enabled = true` to `supabase/config.toml`, so MCP clients get the sign-in challenge."]
307
370
  }
308
371
  };
309
372
  /** The integration and what it requires, dependencies first, without duplicates. */
@@ -334,9 +397,11 @@ function suggestedIntegrations(frameworks) {
334
397
  names.push("orpc");
335
398
  break;
336
399
  case "vite":
337
- case "expo":
338
400
  names.push("client");
339
401
  break;
402
+ case "expo":
403
+ names.push("expo");
404
+ break;
340
405
  case "tanstack-query":
341
406
  names.push("react");
342
407
  break;
@@ -345,6 +410,86 @@ function suggestedIntegrations(frameworks) {
345
410
  return resolveIntegrations(names);
346
411
  }
347
412
  //#endregion
413
+ //#region src/cli/workspace.ts
414
+ const unquote = (value) => value.replace(/\s+#.*$/, "").trim().replace(/^(["'])(.*)\1$/, "$2");
415
+ /** The `packages` globs of `pnpm-workspace.yaml`, in block or flow style. */
416
+ function pnpmWorkspacePatterns(text) {
417
+ const lines = text.split(/\r?\n/);
418
+ const start = lines.findIndex((line) => /^packages\s*:/.test(line));
419
+ if (start === -1) return [];
420
+ const inline = /^packages\s*:\s*\[(.*)\]\s*(?:#.*)?$/.exec(lines[start]);
421
+ if (inline) return inline[1].split(",").map(unquote).filter((entry) => entry !== "");
422
+ const patterns = [];
423
+ for (const line of lines.slice(start + 1)) {
424
+ if (/^\s*(?:#.*)?$/.test(line)) continue;
425
+ const item = /^\s+-\s*(.+)$/.exec(line);
426
+ if (!item) break;
427
+ patterns.push(unquote(item[1]));
428
+ }
429
+ return patterns.filter((entry) => entry !== "");
430
+ }
431
+ function packageJsonPatterns(workspaces) {
432
+ let list = workspaces;
433
+ if (typeof workspaces === "object" && workspaces !== null && "packages" in workspaces) list = workspaces.packages;
434
+ return Array.isArray(list) ? list.filter((entry) => typeof entry === "string") : [];
435
+ }
436
+ async function matches(root, pattern) {
437
+ const dirs = [];
438
+ const base = pattern.replace(/^\.\//, "").replace(/\/$/, "");
439
+ for await (const path of glob(`${base}/package.json`, {
440
+ cwd: root,
441
+ exclude: (name) => name === "node_modules"
442
+ })) dirs.push(posix.dirname(path.replaceAll("\\", "/")));
443
+ return dirs;
444
+ }
445
+ /**
446
+ * The workspace declared at `root` by `pnpm-workspace.yaml` or the
447
+ * `workspaces` field of `package.json`, with its packages in path order.
448
+ * `undefined` when `root` declares none.
449
+ */
450
+ async function detectWorkspace(root) {
451
+ let file;
452
+ let patterns;
453
+ const yaml = join(root, "pnpm-workspace.yaml");
454
+ if (existsSync(yaml)) {
455
+ file = "pnpm-workspace.yaml";
456
+ patterns = pnpmWorkspacePatterns(await readFile(yaml, "utf8"));
457
+ } else {
458
+ const path = join(root, "package.json");
459
+ if (!existsSync(path)) return void 0;
460
+ let pkg;
461
+ try {
462
+ pkg = JSON.parse(await readFile(path, "utf8"));
463
+ } catch {
464
+ return;
465
+ }
466
+ if (typeof pkg !== "object" || pkg === null || !("workspaces" in pkg)) return void 0;
467
+ file = "package.json";
468
+ patterns = packageJsonPatterns(pkg.workspaces);
469
+ if (patterns.length === 0) return void 0;
470
+ }
471
+ const included = /* @__PURE__ */ new Set();
472
+ const excluded = /* @__PURE__ */ new Set();
473
+ for (const pattern of patterns) {
474
+ const negated = pattern.startsWith("!");
475
+ for (const dir of await matches(root, negated ? pattern.slice(1) : pattern)) (negated ? excluded : included).add(dir);
476
+ }
477
+ const dirs = [...included].filter((dir) => dir !== "." && !excluded.has(dir)).sort();
478
+ const packages = await Promise.all(dirs.map(async (dir) => ({
479
+ dir,
480
+ project: await detectProject(join(root, dir))
481
+ })));
482
+ return {
483
+ file,
484
+ packages
485
+ };
486
+ }
487
+ /** The package `init` suggests: one that uses better-supabase, then one with a framework. */
488
+ function suggestedPackage(workspace) {
489
+ const packages = workspace.packages;
490
+ return (packages.find((entry) => "better-supabase" in entry.project.dependencies) ?? packages.find((entry) => entry.project.frameworks.length > 0) ?? packages[0])?.dir;
491
+ }
492
+ //#endregion
348
493
  //#region src/cli/commands/init.ts
349
494
  const INIT_ARGS = {
350
495
  casing: {
@@ -354,9 +499,14 @@ const INIT_ARGS = {
354
499
  },
355
500
  with: {
356
501
  type: "string",
357
- description: "Integrations to add next to the detected ones: next, hono, orpc, edge, mcp, client, react",
502
+ description: "Integrations to add next to the detected ones: next, hono, orpc, edge, expo, mcp, client, react",
358
503
  valueHint: "integration,..."
359
504
  },
505
+ package: {
506
+ type: "string",
507
+ description: "Workspace package to write to, relative to --cwd",
508
+ valueHint: "dir"
509
+ },
360
510
  force: {
361
511
  type: "boolean",
362
512
  description: "Overwrite files that exist"
@@ -370,7 +520,7 @@ const ADD_ARGS = {
370
520
  integration: {
371
521
  type: "positional",
372
522
  required: false,
373
- description: "next, hono, orpc, edge, mcp, client or react"
523
+ description: "next, hono, orpc, edge, expo, mcp, client or react"
374
524
  },
375
525
  force: {
376
526
  type: "boolean",
@@ -386,13 +536,13 @@ const CANCELLED = {
386
536
  error: "Cancelled."
387
537
  };
388
538
  /** `--force`, or the person's answer when files exist; `undefined` when they cancel. */
389
- async function overwrite(root, files, args, prompts) {
539
+ async function overwrite(root, files, args, prompts, base = root) {
390
540
  if (args.force === true) return true;
391
541
  const existing = [...new Set(files.map((file) => file.path).filter((path) => existsSync(resolve(root, path))))];
392
542
  if (!prompts || existing.length === 0) return false;
393
- return prompts.confirm(`${existing.map((path) => display(root, path)).join(", ")} ${existing.length === 1 ? "exists" : "exist"}. Overwrite?`);
543
+ return prompts.confirm(`${existing.map((path) => display(base, resolve(root, path))).join(", ")} ${existing.length === 1 ? "exists" : "exist"}. Overwrite?`);
394
544
  }
395
- async function writeFiles(root, files, args, force) {
545
+ async function writeFiles(root, files, args, force, base = root) {
396
546
  const dryRun = args["dry-run"] === true;
397
547
  const lines = [];
398
548
  const seen = /* @__PURE__ */ new Set();
@@ -400,7 +550,7 @@ async function writeFiles(root, files, args, force) {
400
550
  if (seen.has(file.path)) continue;
401
551
  seen.add(file.path);
402
552
  const path = resolve(root, file.path);
403
- const shown = display(root, file.path);
553
+ const shown = display(base, path);
404
554
  if (existsSync(path) && !force) {
405
555
  lines.push(`Kept ${shown} (exists)`);
406
556
  continue;
@@ -413,6 +563,24 @@ async function writeFiles(root, files, args, force) {
413
563
  }
414
564
  return lines;
415
565
  }
566
+ /**
567
+ * Adds `[experimental.pgdelta] enabled = true` to `supabase/config.toml`
568
+ * when it has no such table, so `supabase db schema declarative sync`
569
+ * runs on pg-delta. A table set to `enabled = false` is left alone.
570
+ */
571
+ async function enablePgDelta(root, args, base) {
572
+ const supabaseRoot = findSupabaseRoot(root);
573
+ const toml = await readSupabaseToml(root);
574
+ if (supabaseRoot === void 0 || toml === void 0) return [];
575
+ const path = join(supabaseRoot, "supabase/config.toml");
576
+ const shown = display(base, path);
577
+ if (diffEngine(toml) === "pg-delta") return [];
578
+ if (tomlGet(toml.document, ["experimental", "pgdelta"]) !== void 0 || toml.text.includes("pgdelta")) return [`Kept ${shown} (pg-delta is off; set [experimental.pgdelta] enabled = true, remove [db.migrations] schema_paths and use \`supabase db schema declarative sync\` instead of \`supabase db diff\`)`];
579
+ if (args["dry-run"] === true) return [`Would enable pg-delta in ${shown}`];
580
+ const separator = toml.text === "" || toml.text.endsWith("\n\n") ? "" : toml.text.endsWith("\n") ? "\n" : "\n\n";
581
+ await writeIfChanged(path, `${toml.text}${separator}${PGDELTA_TABLE}`);
582
+ return [`Enabled pg-delta in ${shown}`];
583
+ }
416
584
  function context(project, generated) {
417
585
  return {
418
586
  srcDir: project.srcDir,
@@ -433,9 +601,10 @@ function packagesFor(project, names) {
433
601
  ];
434
602
  return [...new Set(wanted)].filter((name) => !(name in project.dependencies));
435
603
  }
436
- /** pg as a dev dependency, when the project lacks it. */
604
+ /** pg and the pinned postgrest-typegen as dev dependencies, the ones the project lacks. */
437
605
  function devPackages(project) {
438
- return "pg" in project.dependencies ? [] : [["pg"]];
606
+ const missing = [..."pg" in project.dependencies ? [] : ["pg"], ..."@supabase/postgrest-typegen" in project.dependencies ? [] : [`@supabase/postgrest-typegen@${TYPEGEN_VERSION}`]];
607
+ return missing.length === 0 ? [] : [missing];
439
608
  }
440
609
  function chooseIntegrations(prompts, initial) {
441
610
  return prompts.multiselect("Integrations", INTEGRATIONS.map((name) => ({
@@ -449,6 +618,34 @@ function parseIntegrations(values) {
449
618
  if (unknown.length > 0) return `Unknown integration ${unknown.join(", ")}. Available: ${INTEGRATIONS.join(", ")}`;
450
619
  return values.filter(isIntegration);
451
620
  }
621
+ /** Where `init` writes: `--cwd`, `--package`, or the workspace package the person picks. */
622
+ async function initTarget(cwd, args, prompts) {
623
+ if (args.package !== void 0) {
624
+ const dir = posix.normalize(args.package.replaceAll("\\", "/"));
625
+ if (!existsSync(join(cwd, dir, "package.json"))) return {
626
+ code: 2,
627
+ error: `--package ${args.package} has no package.json. Pass the directory of a workspace package, relative to --cwd.`
628
+ };
629
+ return { dir: dir.replace(/\/$/, "") || "." };
630
+ }
631
+ const workspace = await detectWorkspace(cwd);
632
+ if (!workspace || workspace.packages.length === 0) return { dir: "." };
633
+ const suggested = suggestedPackage(workspace) ?? ".";
634
+ if (!prompts) return {
635
+ code: 2,
636
+ error: `${workspace.file} makes this a workspace root. Pass --package with the package that owns the runtime (${workspace.packages.map((entry) => entry.dir).join(", ")}), or --package . to write here.`
637
+ };
638
+ const dir = await prompts.select("Package that owns the runtime", [...workspace.packages.map((entry) => ({
639
+ value: entry.dir,
640
+ label: entry.dir,
641
+ ...entry.project.name ? { hint: entry.project.name } : {}
642
+ })), {
643
+ value: ".",
644
+ label: ".",
645
+ hint: "the workspace root"
646
+ }], suggested);
647
+ return dir === void 0 ? CANCELLED : { dir };
648
+ }
452
649
  async function runInit(config, args, prompts) {
453
650
  const casing = args.casing ?? (prompts ? await prompts.select("Row keys", [{
454
651
  value: "camel",
@@ -464,7 +661,19 @@ async function runInit(config, args, prompts) {
464
661
  code: 2,
465
662
  error: "--casing must be \"camel\" or \"snake\""
466
663
  };
467
- const project = await detectProject(config.root);
664
+ const target = await initTarget(config.root, args, prompts);
665
+ if ("code" in target) return target;
666
+ const root = resolve(config.root, target.dir);
667
+ const inPackage = target.dir !== ".";
668
+ const workspaceProject = await detectProject(config.root);
669
+ const project = inPackage ? {
670
+ ...await detectProject(root),
671
+ packageManager: workspaceProject.packageManager
672
+ } : workspaceProject;
673
+ const installTarget = inPackage ? {
674
+ dir: target.dir,
675
+ name: project.name
676
+ } : void 0;
468
677
  const requested = parseIntegrations(list(args.with));
469
678
  if (typeof requested === "string") return {
470
679
  code: 2,
@@ -474,23 +683,29 @@ async function runInit(config, args, prompts) {
474
683
  const chosen = args.with === void 0 && prompts ? await chooseIntegrations(prompts, detected) : detected;
475
684
  if (chosen === void 0) return CANCELLED;
476
685
  const integrations = resolveIntegrations(chosen);
477
- const templateContext = context(project, findConfig(config.root) !== void 0 ? config.output : posix.normalize(posix.join(project.srcDir, "lib/supabase/generated.ts")));
686
+ const hasConfig = findConfig(root) !== void 0;
687
+ let generated = posix.normalize(posix.join(project.srcDir, "lib/supabase/generated.ts"));
688
+ if (hasConfig) generated = inPackage ? (await loadConfig(root)).output : config.output;
689
+ const templateContext = context(project, generated);
478
690
  const files = [...baseFiles(templateContext, casing, needsLib(integrations)), ...integrationFiles(integrations, templateContext)];
479
- const force = await overwrite(config.root, files, args, prompts);
691
+ const force = await overwrite(root, files, args, prompts, config.root);
480
692
  if (force === void 0) return CANCELLED;
693
+ const where = inPackage ? ` in ${target.dir}` : "";
481
694
  const lines = [
482
- project.frameworks.length > 0 ? `Found ${project.frameworks.join(", ")}.` : "No framework found.",
695
+ project.frameworks.length > 0 ? `Found ${project.frameworks.join(", ")}${where}.` : `No framework found${where}.`,
483
696
  "",
484
- ...await writeFiles(config.root, files, args, force)
697
+ ...await writeFiles(root, files, args, force, config.root),
698
+ ...await enablePgDelta(root, args, config.root)
485
699
  ];
486
700
  const packages = packagesFor(project, integrations);
701
+ const cwdFlag = inPackage ? ` --cwd ${target.dir}` : "";
487
702
  const steps = [
488
- ...packages.length > 0 ? [installCommand(project.packageManager, packages)] : [],
489
- ...devPackages(project).map((names) => installCommand(project.packageManager, names, true)),
490
- ...project.hasSupabase ? [] : ["supabase init"],
703
+ ...packages.length > 0 ? [installCommand(project.packageManager, packages, false, installTarget)] : [],
704
+ ...devPackages(project).map((names) => installCommand(project.packageManager, names, true, installTarget)),
705
+ ...project.hasSupabase || workspaceProject.hasSupabase ? [] : ["supabase init"],
491
706
  "supabase start",
492
- "better-supabase env",
493
- "better-supabase gen"
707
+ `better-supabase env${cwdFlag}`,
708
+ `better-supabase gen${cwdFlag}`
494
709
  ];
495
710
  lines.push("", "Next:", ...steps.map((step, index) => ` ${index + 1}. ${step}`));
496
711
  for (const name of integrations) for (const hint of TEMPLATES[name].next ?? []) lines.push(` - ${hint}`);
@@ -1,8 +1,8 @@
1
1
  import { r as defineCliCommand } from "./command-CK14fP91.js";
2
- import { r as writeIfChanged, t as display } from "./io-k41_z-jT.js";
2
+ import { i as writeIfChanged, r as sameText, t as display } from "./io-DI1mTdSA.js";
3
3
  import { r as painter } from "./style-C0NFdJRL.js";
4
4
  import { t as fileDiff } from "./diff-SjkO5rNr.js";
5
- import { _ as restrictSchemas, a as sourceArgs, o as loadSnapshot, t as SOURCE_ARGS, u as serializeSnapshot, v as serializeGenerator } from "./gen-C2osRcr5.js";
5
+ import { T as serializeGenerator, c as loadSnapshot, f as serializeSnapshot, s as sourceArgs, t as SOURCE_ARGS, w as restrictSchemas } from "./gen-BGLb_zou.js";
6
6
  import { n as withSpinner } from "./prompts-BNcNfAve.js";
7
7
  import { resolve } from "node:path";
8
8
  import { readFile } from "node:fs/promises";
@@ -10,7 +10,7 @@ import { readFile } from "node:fs/promises";
10
10
  const ARGS = {
11
11
  out: {
12
12
  type: "string",
13
- description: "Defaults to supabase/snapshot.json, or supabase/generator-metadata.json",
13
+ description: "Defaults to source.snapshot, supabase/snapshot.json, or supabase/generator-metadata.json",
14
14
  valueHint: "file"
15
15
  },
16
16
  format: {
@@ -42,12 +42,12 @@ const introspectCommand = defineCliCommand({
42
42
  live: true,
43
43
  ...signal ? { signal } : {}
44
44
  }));
45
- const out = args.out ?? (format === "snapshot" ? "supabase/snapshot.json" : "supabase/generator-metadata.json");
45
+ const out = args.out ?? (format === "snapshot" ? config.source.snapshot ?? "supabase/snapshot.json" : "supabase/generator-metadata.json");
46
46
  const contents = format === "snapshot" ? serializeSnapshot(snapshot) : `${await serializeGenerator(restrictSchemas(snapshot.generator, config.schemas))}\n`;
47
47
  if (args.check === true) {
48
48
  const current = await readFile(resolve(config.root, out), "utf8").catch(() => void 0);
49
49
  const file = display(config.root, out);
50
- return current === contents ? {
50
+ return sameText(current, contents) ? {
51
51
  code: 0,
52
52
  output: `${file} is up to date.`,
53
53
  data: {
@@ -2,10 +2,19 @@ import { dirname, relative, resolve, sep } from "node:path";
2
2
  import { existsSync } from "node:fs";
3
3
  import { mkdir, readFile, writeFile } from "node:fs/promises";
4
4
  //#region src/cli/io.ts
5
- /** Writes a file when its contents changed. Returns whether it wrote. */
5
+ /** `text` with `\r\n` line endings turned into `\n`. */
6
+ const withLf = (text) => text.replaceAll("\r\n", "\n");
7
+ /**
8
+ * Whether a file on disk holds `expected`, ignoring line endings: a checkout
9
+ * with `core.autocrlf` turns every `\n` into `\r\n`.
10
+ */
11
+ function sameText(current, expected) {
12
+ return current !== void 0 && withLf(current) === withLf(expected);
13
+ }
14
+ /** Writes a file when its contents changed, ignoring line endings. Returns whether it wrote. */
6
15
  async function writeIfChanged(path, contents) {
7
16
  if (existsSync(path)) {
8
- if (await readFile(path, "utf8") === contents) return false;
17
+ if (sameText(await readFile(path, "utf8"), contents)) return false;
9
18
  }
10
19
  await mkdir(dirname(path), { recursive: true });
11
20
  await writeFile(path, contents);
@@ -21,4 +30,4 @@ function display(root, path) {
21
30
  return relative(root, resolve(root, path)).split(sep).join("/") || ".";
22
31
  }
23
32
  //#endregion
24
- export { importPath as n, writeIfChanged as r, display as t };
33
+ export { writeIfChanged as i, importPath as n, sameText as r, display as t };