@motherbase/client 2.2.1 → 2.2.3

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 (222) hide show
  1. package/COMPATIBILITY.md +157 -0
  2. package/LICENSE +21 -21
  3. package/README.md +52 -4
  4. package/dist/admin/auth-admin-client.d.ts +43 -0
  5. package/dist/admin/auth-admin-client.d.ts.map +1 -0
  6. package/dist/admin/auth-admin-client.js +62 -0
  7. package/dist/admin/auth-admin-client.js.map +1 -0
  8. package/dist/admin/auth-admin-mfa-client.d.ts +22 -0
  9. package/dist/admin/auth-admin-mfa-client.d.ts.map +1 -0
  10. package/dist/admin/auth-admin-mfa-client.js +17 -0
  11. package/dist/admin/auth-admin-mfa-client.js.map +1 -0
  12. package/dist/admin/types.d.ts +85 -0
  13. package/dist/admin/types.d.ts.map +1 -0
  14. package/dist/admin/types.js +3 -0
  15. package/dist/admin/types.js.map +1 -0
  16. package/dist/auth/constants.d.ts +21 -0
  17. package/dist/auth/constants.d.ts.map +1 -0
  18. package/dist/auth/constants.js +34 -0
  19. package/dist/auth/constants.js.map +1 -0
  20. package/dist/auth/index.d.ts +5 -0
  21. package/dist/auth/index.d.ts.map +1 -0
  22. package/dist/auth/index.js +34 -0
  23. package/dist/auth/index.js.map +1 -0
  24. package/dist/auth/motherbase-plugin.d.ts +6 -0
  25. package/dist/auth/motherbase-plugin.d.ts.map +1 -0
  26. package/dist/auth/motherbase-plugin.js +80 -0
  27. package/dist/auth/motherbase-plugin.js.map +1 -0
  28. package/dist/auth/pkce.d.ts +19 -0
  29. package/dist/auth/pkce.d.ts.map +1 -0
  30. package/dist/auth/pkce.js +89 -0
  31. package/dist/auth/pkce.js.map +1 -0
  32. package/dist/auth/session-utils.d.ts +29 -0
  33. package/dist/auth/session-utils.d.ts.map +1 -0
  34. package/dist/auth/session-utils.js +123 -0
  35. package/dist/auth/session-utils.js.map +1 -0
  36. package/dist/auth/session.d.ts +51 -0
  37. package/dist/auth/session.d.ts.map +1 -0
  38. package/dist/auth/session.js +161 -0
  39. package/dist/auth/session.js.map +1 -0
  40. package/dist/auth/types.d.ts +341 -0
  41. package/dist/auth/types.d.ts.map +1 -0
  42. package/dist/auth/types.js +2 -0
  43. package/dist/auth/types.js.map +1 -0
  44. package/dist/auth/utils.d.ts +28 -0
  45. package/dist/auth/utils.d.ts.map +1 -0
  46. package/dist/auth/utils.js +70 -0
  47. package/dist/auth/utils.js.map +1 -0
  48. package/dist/auth.d.ts +3 -2
  49. package/dist/auth.d.ts.map +1 -1
  50. package/dist/auth.js +27 -11
  51. package/dist/auth.js.map +1 -1
  52. package/dist/channel.d.ts +11 -0
  53. package/dist/channel.d.ts.map +1 -1
  54. package/dist/channel.js +26 -2
  55. package/dist/channel.js.map +1 -1
  56. package/dist/cookies/cookie-storage.d.ts +12 -0
  57. package/dist/cookies/cookie-storage.d.ts.map +1 -0
  58. package/dist/cookies/cookie-storage.js +35 -0
  59. package/dist/cookies/cookie-storage.js.map +1 -0
  60. package/dist/cookies/index.d.ts +5 -0
  61. package/dist/cookies/index.d.ts.map +1 -0
  62. package/dist/cookies/index.js +5 -0
  63. package/dist/cookies/index.js.map +1 -0
  64. package/dist/cookies/server-cookie-storage.d.ts +20 -0
  65. package/dist/cookies/server-cookie-storage.d.ts.map +1 -0
  66. package/dist/cookies/server-cookie-storage.js +60 -0
  67. package/dist/cookies/server-cookie-storage.js.map +1 -0
  68. package/dist/cookies/types.d.ts +33 -0
  69. package/dist/cookies/types.d.ts.map +1 -0
  70. package/dist/cookies/types.js +8 -0
  71. package/dist/cookies/types.js.map +1 -0
  72. package/dist/cookies/utils.d.ts +23 -0
  73. package/dist/cookies/utils.d.ts.map +1 -0
  74. package/dist/cookies/utils.js +67 -0
  75. package/dist/cookies/utils.js.map +1 -0
  76. package/dist/database/database.d.ts +197 -0
  77. package/dist/database/database.d.ts.map +1 -0
  78. package/dist/database/database.js +2 -0
  79. package/dist/database/database.js.map +1 -0
  80. package/dist/database/facade.d.ts +144 -0
  81. package/dist/database/facade.d.ts.map +1 -0
  82. package/dist/database/facade.js +147 -0
  83. package/dist/database/facade.js.map +1 -0
  84. package/dist/database/query.d.ts +97 -0
  85. package/dist/database/query.d.ts.map +1 -0
  86. package/dist/database/query.js +94 -0
  87. package/dist/database/query.js.map +1 -0
  88. package/dist/database/types.d.ts +314 -0
  89. package/dist/database/types.d.ts.map +1 -0
  90. package/dist/database/types.js +2 -0
  91. package/dist/database/types.js.map +1 -0
  92. package/dist/functions/errors.d.ts +28 -0
  93. package/dist/functions/errors.d.ts.map +1 -0
  94. package/dist/functions/errors.js +37 -0
  95. package/dist/functions/errors.js.map +1 -0
  96. package/dist/functions/index.d.ts +9 -0
  97. package/dist/functions/index.d.ts.map +1 -0
  98. package/dist/functions/index.js +40 -0
  99. package/dist/functions/index.js.map +1 -0
  100. package/dist/functions/types.d.ts +25 -0
  101. package/dist/functions/types.d.ts.map +1 -0
  102. package/dist/functions/types.js +2 -0
  103. package/dist/functions/types.js.map +1 -0
  104. package/dist/http/backend-error.d.ts +17 -0
  105. package/dist/http/backend-error.d.ts.map +1 -0
  106. package/dist/http/backend-error.js +11 -0
  107. package/dist/http/backend-error.js.map +1 -0
  108. package/dist/http/index.d.ts +59 -0
  109. package/dist/http/index.d.ts.map +1 -0
  110. package/dist/http/index.js +175 -0
  111. package/dist/http/index.js.map +1 -0
  112. package/dist/http/types.d.ts +45 -0
  113. package/dist/http/types.d.ts.map +1 -0
  114. package/dist/http/types.js +2 -0
  115. package/dist/http/types.js.map +1 -0
  116. package/dist/http/utils.d.ts +14 -0
  117. package/dist/http/utils.d.ts.map +1 -0
  118. package/dist/http/utils.js +37 -0
  119. package/dist/http/utils.js.map +1 -0
  120. package/dist/http.d.ts.map +1 -1
  121. package/dist/http.js +2 -1
  122. package/dist/http.js.map +1 -1
  123. package/dist/index.d.ts +47 -77
  124. package/dist/index.d.ts.map +1 -1
  125. package/dist/index.js +58 -73
  126. package/dist/index.js.map +1 -1
  127. package/dist/pkce.js +4 -4
  128. package/dist/postgrest/index.d.ts +4 -0
  129. package/dist/postgrest/index.d.ts.map +1 -0
  130. package/dist/postgrest/index.js +4 -0
  131. package/dist/postgrest/index.js.map +1 -0
  132. package/dist/postgrest/query-builder.d.ts +224 -0
  133. package/dist/postgrest/query-builder.d.ts.map +1 -0
  134. package/dist/postgrest/query-builder.js +544 -0
  135. package/dist/postgrest/query-builder.js.map +1 -0
  136. package/dist/postgrest/rpc.d.ts +12 -0
  137. package/dist/postgrest/rpc.d.ts.map +1 -0
  138. package/dist/postgrest/rpc.js +42 -0
  139. package/dist/postgrest/rpc.js.map +1 -0
  140. package/dist/postgrest/types.d.ts +88 -0
  141. package/dist/postgrest/types.d.ts.map +1 -0
  142. package/dist/postgrest/types.js +2 -0
  143. package/dist/postgrest/types.js.map +1 -0
  144. package/dist/postgrest/utils.d.ts +23 -0
  145. package/dist/postgrest/utils.d.ts.map +1 -0
  146. package/dist/postgrest/utils.js +87 -0
  147. package/dist/postgrest/utils.js.map +1 -0
  148. package/dist/postgrest.d.ts +5 -1
  149. package/dist/postgrest.d.ts.map +1 -1
  150. package/dist/postgrest.js +17 -10
  151. package/dist/postgrest.js.map +1 -1
  152. package/dist/realtime/channel.d.ts +83 -0
  153. package/dist/realtime/channel.d.ts.map +1 -0
  154. package/dist/realtime/channel.js +240 -0
  155. package/dist/realtime/channel.js.map +1 -0
  156. package/dist/realtime/index.d.ts +94 -0
  157. package/dist/realtime/index.d.ts.map +1 -0
  158. package/dist/realtime/index.js +455 -0
  159. package/dist/realtime/index.js.map +1 -0
  160. package/dist/realtime/types.d.ts +120 -0
  161. package/dist/realtime/types.d.ts.map +1 -0
  162. package/dist/realtime/types.js +2 -0
  163. package/dist/realtime/types.js.map +1 -0
  164. package/dist/realtime.d.ts +1 -0
  165. package/dist/realtime.d.ts.map +1 -1
  166. package/dist/realtime.js +26 -1
  167. package/dist/realtime.js.map +1 -1
  168. package/dist/runtime.d.ts +13 -0
  169. package/dist/runtime.d.ts.map +1 -0
  170. package/dist/runtime.js +15 -0
  171. package/dist/runtime.js.map +1 -0
  172. package/dist/session.d.ts +2 -0
  173. package/dist/session.d.ts.map +1 -1
  174. package/dist/session.js +11 -2
  175. package/dist/session.js.map +1 -1
  176. package/dist/storage/bucket.d.ts +166 -0
  177. package/dist/storage/bucket.d.ts.map +1 -0
  178. package/dist/storage/bucket.js +294 -0
  179. package/dist/storage/bucket.js.map +1 -0
  180. package/dist/storage/index.d.ts +45 -0
  181. package/dist/storage/index.d.ts.map +1 -0
  182. package/dist/storage/index.js +55 -0
  183. package/dist/storage/index.js.map +1 -0
  184. package/dist/storage/types.d.ts +131 -0
  185. package/dist/storage/types.d.ts.map +1 -0
  186. package/dist/storage/types.js +2 -0
  187. package/dist/storage/types.js.map +1 -0
  188. package/dist/storage/utils.d.ts +27 -0
  189. package/dist/storage/utils.d.ts.map +1 -0
  190. package/dist/storage/utils.js +43 -0
  191. package/dist/storage/utils.js.map +1 -0
  192. package/dist/test.d.ts +2 -0
  193. package/dist/test.d.ts.map +1 -0
  194. package/dist/test.js +3 -0
  195. package/dist/test.js.map +1 -0
  196. package/dist/types.d.ts +14 -249
  197. package/dist/types.d.ts.map +1 -1
  198. package/dist/utils/compat.d.ts +40 -0
  199. package/dist/utils/compat.d.ts.map +1 -0
  200. package/dist/utils/compat.js +100 -0
  201. package/dist/utils/compat.js.map +1 -0
  202. package/dist/utils/runtime.d.ts +13 -0
  203. package/dist/utils/runtime.d.ts.map +1 -0
  204. package/dist/utils/runtime.js +15 -0
  205. package/dist/utils/runtime.js.map +1 -0
  206. package/dist/utils/testing.d.ts +38 -0
  207. package/dist/utils/testing.d.ts.map +1 -0
  208. package/dist/utils/testing.js +50 -0
  209. package/dist/utils/testing.js.map +1 -0
  210. package/dist/utils/warn.d.ts +2 -0
  211. package/dist/utils/warn.d.ts.map +1 -0
  212. package/dist/utils/warn.js +23 -0
  213. package/dist/utils/warn.js.map +1 -0
  214. package/package.json +13 -11
  215. package/dist/devices.d.ts +0 -13
  216. package/dist/devices.d.ts.map +0 -1
  217. package/dist/devices.js +0 -13
  218. package/dist/devices.js.map +0 -1
  219. package/dist/profile.d.ts +0 -16
  220. package/dist/profile.d.ts.map +0 -1
  221. package/dist/profile.js +0 -26
  222. package/dist/profile.js.map +0 -1
@@ -0,0 +1,544 @@
1
+ import { contractPath } from "@motherbase/contracts";
2
+ import { encodeArrayLiteral, encodeArrayOperand, encodeList, encodeLiteral, encodeRawOperand, isValueOf, parseContentRange, referenced, safeJson, scopedKey, } from "./utils.js";
3
+ import { toError } from "../http/utils.js";
4
+ export class PostgrestQueryBuilder {
5
+ constructor(http, model,
6
+ /** supabase-js semantic parity, from `createClient(..., { compat: 'supabase' })`. */
7
+ compat = false,
8
+ /** Batch builders describe writes; they cannot send individual requests. */
9
+ transactionOnly = false) {
10
+ this.http = http;
11
+ this.model = model;
12
+ this.compat = compat;
13
+ this.transactionOnly = transactionOnly;
14
+ this.method = 'GET';
15
+ this.columns = '*';
16
+ /**
17
+ * Repeated filters on one column must all survive: `?price=gt.10&price=lt.20`
18
+ * is two conditions ANDed together, which is why every filter is `append`ed
19
+ * and never `set`. Using `set` here (as this builder once did) silently
20
+ * dropped the first of the two.
21
+ */
22
+ this.filters = new URLSearchParams();
23
+ /** Reserved params that are replaced rather than repeated (`columns`, `on_conflict`). */
24
+ this.extras = new Map();
25
+ /** Keyed by referenced table (`''` for the base relation). */
26
+ this.orderParts = new Map();
27
+ this.limits = new Map();
28
+ this.offsets = new Map();
29
+ this.prefer = [];
30
+ this.responseKind = 'json';
31
+ this.headOnly = false;
32
+ this.extraHeaders = {};
33
+ this.rowMode = 'many';
34
+ this.shouldThrow = false;
35
+ /** Set by `select()`, so a write can tell "rows asked for" from "no rows requested". */
36
+ this.selectCalled = false;
37
+ }
38
+ // --- verbs -------------------------------------------------------------
39
+ /**
40
+ * Choose the columns, and optionally ask for a row count.
41
+ *
42
+ * After a write, `.select()` is the supabase-js way of asking for the rows
43
+ * back, so it also sends `Prefer: return=representation`.
44
+ */
45
+ select(columns = '*', options = {}) {
46
+ this.columns = columns;
47
+ this.selectCalled = true;
48
+ if (options.count)
49
+ this.countOption = options.count;
50
+ if (options.head) {
51
+ this.headOnly = true;
52
+ if (this.method === 'GET')
53
+ this.method = 'HEAD';
54
+ }
55
+ return this;
56
+ }
57
+ insert(values, options = {}) {
58
+ this.method = 'POST';
59
+ this.body = values;
60
+ this.applyColumns(values);
61
+ if (options.count)
62
+ this.countOption = options.count;
63
+ if (options.defaultToNull === false)
64
+ this.prefer.push('missing=default');
65
+ return this;
66
+ }
67
+ /**
68
+ * `INSERT .. ON CONFLICT DO UPDATE`. The conflict target defaults to the
69
+ * primary key server side; `onConflict` names another unique constraint.
70
+ */
71
+ upsert(values, options = {}) {
72
+ this.method = 'POST';
73
+ this.body = values;
74
+ this.applyColumns(values);
75
+ this.prefer.push(`resolution=${options.ignoreDuplicates ? 'ignore' : 'merge'}-duplicates`);
76
+ if (options.onConflict !== undefined)
77
+ this.extras.set('on_conflict', options.onConflict);
78
+ if (options.count)
79
+ this.countOption = options.count;
80
+ if (options.defaultToNull === false)
81
+ this.prefer.push('missing=default');
82
+ return this;
83
+ }
84
+ update(values, options = {}) {
85
+ this.method = 'PATCH';
86
+ this.body = values;
87
+ if (options.count)
88
+ this.countOption = options.count;
89
+ return this;
90
+ }
91
+ delete(options = {}) {
92
+ this.method = 'DELETE';
93
+ if (options.count)
94
+ this.countOption = options.count;
95
+ return this;
96
+ }
97
+ /**
98
+ * A bulk write states its column set explicitly, so a key missing from one
99
+ * row is still written (as NULL, or as the column default under
100
+ * `missing=default`) instead of being inferred from the first row alone.
101
+ */
102
+ applyColumns(values) {
103
+ if (!Array.isArray(values))
104
+ return;
105
+ const seen = new Set();
106
+ for (const row of values) {
107
+ if (row && typeof row === 'object')
108
+ for (const key of Object.keys(row))
109
+ seen.add(key);
110
+ }
111
+ if (seen.size) {
112
+ this.extras.set('columns', Array.from(seen, column => `"${column}"`).join(','));
113
+ }
114
+ }
115
+ // --- filters -----------------------------------------------------------
116
+ eq(column, value) {
117
+ return this.push(column, `eq.${encodeLiteral(value)}`);
118
+ }
119
+ neq(column, value) {
120
+ return this.push(column, `neq.${encodeLiteral(value)}`);
121
+ }
122
+ gt(column, value) {
123
+ return this.push(column, `gt.${encodeLiteral(value)}`);
124
+ }
125
+ gte(column, value) {
126
+ return this.push(column, `gte.${encodeLiteral(value)}`);
127
+ }
128
+ lt(column, value) {
129
+ return this.push(column, `lt.${encodeLiteral(value)}`);
130
+ }
131
+ lte(column, value) {
132
+ return this.push(column, `lte.${encodeLiteral(value)}`);
133
+ }
134
+ /** Case-sensitive LIKE. `*` is PostgREST's URL-friendly `%`. */
135
+ like(column, pattern) {
136
+ return this.push(column, `like.${encodeLiteral(pattern)}`);
137
+ }
138
+ ilike(column, pattern) {
139
+ return this.push(column, `ilike.${encodeLiteral(pattern)}`);
140
+ }
141
+ likeAllOf(column, patterns) {
142
+ return this.push(column, `like(all).${encodeArrayLiteral(patterns)}`);
143
+ }
144
+ likeAnyOf(column, patterns) {
145
+ return this.push(column, `like(any).${encodeArrayLiteral(patterns)}`);
146
+ }
147
+ ilikeAllOf(column, patterns) {
148
+ return this.push(column, `ilike(all).${encodeArrayLiteral(patterns)}`);
149
+ }
150
+ ilikeAnyOf(column, patterns) {
151
+ return this.push(column, `ilike(any).${encodeArrayLiteral(patterns)}`);
152
+ }
153
+ in(column, values) {
154
+ return this.push(column, `in.${encodeList(values)}`);
155
+ }
156
+ is(column, value) {
157
+ return this.push(column, `is.${isValueOf(value)}`);
158
+ }
159
+ /** Every key equal to its value, ANDed together. */
160
+ match(query) {
161
+ for (const [column, value] of Object.entries(query))
162
+ this.eq(column, value);
163
+ return this;
164
+ }
165
+ /**
166
+ * Negate any operator: `not('status', 'eq', 'live')` emits
167
+ * `status=not.eq.live`. The value is passed through verbatim for a string, so
168
+ * composite operands (`not('id', 'in', '(1,2)')`) reach the server as written.
169
+ */
170
+ not(column, operator, value) {
171
+ return this.push(column, `not.${operator}.${encodeRawOperand(value)}`);
172
+ }
173
+ /**
174
+ * The escape hatch: any operator, including the ones with no dedicated method
175
+ * (`match`, `imatch`, `isdistinct`) and the modifier forms (`like(any)`).
176
+ */
177
+ filter(column, operator, value) {
178
+ return this.push(column, `${operator}.${encodeRawOperand(value)}`);
179
+ }
180
+ /**
181
+ * A disjunction, written in PostgREST's own syntax and nestable:
182
+ * `or('status.eq.live,and(price.gt.10,price.lt.20)')`.
183
+ */
184
+ or(filters, options = {}) {
185
+ return this.push(scopedKey(referenced(options), 'or'), `(${filters})`);
186
+ }
187
+ /** Full-text search. `type` picks the tsquery parser, `config` the dictionary. */
188
+ textSearch(column, query, options = {}) {
189
+ const prefix = options.type === 'plain'
190
+ ? 'pl'
191
+ : options.type === 'phrase'
192
+ ? 'ph'
193
+ : options.type === 'websearch'
194
+ ? 'w'
195
+ : '';
196
+ const config = options.config === undefined ? '' : `(${options.config})`;
197
+ return this.push(column, `${prefix}fts${config}.${encodeLiteral(query)}`);
198
+ }
199
+ /** `@>`: the column contains the operand (array, range or jsonb). */
200
+ contains(column, value) {
201
+ return this.push(column, `cs.${encodeArrayOperand(value)}`);
202
+ }
203
+ /** `<@`: the column is contained by the operand. */
204
+ containedBy(column, value) {
205
+ return this.push(column, `cd.${encodeArrayOperand(value)}`);
206
+ }
207
+ /** `&&`: the column and the operand have an element (or a point) in common. */
208
+ overlaps(column, value) {
209
+ return this.push(column, `ov.${encodeArrayOperand(value)}`);
210
+ }
211
+ /** `>>`: strictly right of the range. */
212
+ rangeGt(column, range) {
213
+ return this.push(column, `sr.${range}`);
214
+ }
215
+ /** `&>`: does not extend to the left of the range. */
216
+ rangeGte(column, range) {
217
+ return this.push(column, `nxl.${range}`);
218
+ }
219
+ /** `<<`: strictly left of the range. */
220
+ rangeLt(column, range) {
221
+ return this.push(column, `sl.${range}`);
222
+ }
223
+ /** `&<`: does not extend to the right of the range. */
224
+ rangeLte(column, range) {
225
+ return this.push(column, `nxr.${range}`);
226
+ }
227
+ /** `-|-`: adjacent to the range. */
228
+ rangeAdjacent(column, range) {
229
+ return this.push(column, `adj.${range}`);
230
+ }
231
+ push(key, value) {
232
+ this.filters.append(key, value);
233
+ return this;
234
+ }
235
+ // --- modifiers ---------------------------------------------------------
236
+ order(column, options = {}) {
237
+ const direction = options.ascending === false ? 'desc' : 'asc';
238
+ const nulls = options.nullsFirst === undefined ? '' : options.nullsFirst ? '.nullsfirst' : '.nullslast';
239
+ const prefix = referenced(options);
240
+ const parts = this.orderParts.get(prefix) ?? [];
241
+ parts.push(`${column}.${direction}${nulls}`);
242
+ this.orderParts.set(prefix, parts);
243
+ return this;
244
+ }
245
+ limit(count, options = {}) {
246
+ this.limits.set(referenced(options), count);
247
+ return this;
248
+ }
249
+ /** Inclusive range -> offset/limit. `range(0, 9)` fetches 10 rows from offset 0. */
250
+ range(from, to, options = {}) {
251
+ const prefix = referenced(options);
252
+ this.offsets.set(prefix, from);
253
+ this.limits.set(prefix, to - from + 1);
254
+ return this;
255
+ }
256
+ /**
257
+ * Every matching row, one page at a time.
258
+ *
259
+ * An unbounded `select()` stops at the server's `api.rest.maxRows` (1000 by
260
+ * default) and says nothing about it: the caller gets a full-looking array
261
+ * that is missing everything past the cap. This walks the result instead, so
262
+ * "give me all of them" is expressible without knowing the cap exists.
263
+ *
264
+ * ```ts
265
+ * for await (const row of client.from('events').select('*').stream()) { ... }
266
+ * ```
267
+ *
268
+ * The pages are separate requests, so rows inserted while the walk is running
269
+ * may be seen or missed depending on when they land. Order by a stable column
270
+ * if that matters.
271
+ */
272
+ async *stream(options = {}) {
273
+ for await (const page of this.paginate(options)) {
274
+ for (const row of page.rows)
275
+ yield row;
276
+ }
277
+ }
278
+ /**
279
+ * Like `stream()`, a page at a time rather than a row at a time, with the
280
+ * total from `Content-Range` when the server sent one.
281
+ *
282
+ * An error ends the walk by throwing, unlike awaiting the builder, which
283
+ * resolves `{ data, error }`. A `for await` loop has nowhere to put an error
284
+ * value, and silently ending the iteration early would look exactly like
285
+ * reaching the last page.
286
+ */
287
+ async *paginate(options = {}) {
288
+ const pageSize = options.pageSize ?? 1000;
289
+ if (!Number.isInteger(pageSize) || pageSize < 1) {
290
+ throw new Error(`pageSize must be a positive integer, received ${String(options.pageSize)}`);
291
+ }
292
+ if (this.method !== 'GET') {
293
+ throw new Error('stream() and paginate() read rows: call them on a select(), not on a write.');
294
+ }
295
+ if (this.rowMode !== 'many') {
296
+ throw new Error('stream() and paginate() walk many rows: drop single() / maybeSingle().');
297
+ }
298
+ let from = 0;
299
+ for (;;) {
300
+ this.range(from, from + pageSize - 1);
301
+ const result = await this.execute();
302
+ if (result.error)
303
+ throw Object.assign(new Error(result.error.message), result.error);
304
+ const rows = (result.data ?? []);
305
+ if (rows.length)
306
+ yield { rows, from, count: result.count };
307
+ from += rows.length;
308
+ // A server cap can make any page short. Only an empty page or a known
309
+ // total proves that the walk is complete.
310
+ if (!rows.length || (result.count !== null && from >= result.count))
311
+ return;
312
+ }
313
+ }
314
+ /** Cancel the in-flight request when the signal aborts. */
315
+ abortSignal(signal) {
316
+ this.signal = signal;
317
+ return this;
318
+ }
319
+ /**
320
+ * Send one more header with this request only, as in supabase-js. The usual
321
+ * one is `x-captcha-response`, for a table the project guards with CAPTCHA
322
+ * (Authentication > Attack Protection).
323
+ */
324
+ setHeader(name, value) {
325
+ this.extraHeaders[name] = value;
326
+ return this;
327
+ }
328
+ /**
329
+ * Re-type the rows. Purely a compile-time cast, for cases the generated
330
+ * `Database` cannot express (a computed column, an embedded shape).
331
+ */
332
+ returns() {
333
+ return this;
334
+ }
335
+ /** supabase-js's newer name for `returns()`. Also a compile-time cast only. */
336
+ overrideTypes() {
337
+ return this;
338
+ }
339
+ /**
340
+ * Reject the query instead of resolving `{ data: null, error }`.
341
+ *
342
+ * The `{ data, error }` envelope is the default in both SDKs because it makes
343
+ * a failure impossible to skip by accident. `throwOnError()` is the opt-out
344
+ * for code that would rather use try/catch, and ported Supabase code uses it
345
+ * widely enough that its absence is a `TypeError: … is not a function` on the
346
+ * first query.
347
+ */
348
+ throwOnError() {
349
+ this.shouldThrow = true;
350
+ return this;
351
+ }
352
+ /**
353
+ * Fail the write if it would touch more than `count` rows.
354
+ *
355
+ * A guard against the missing-filter class of accident (`update()` with a
356
+ * typo'd `.eq()`), sent as `Prefer: max-affected`. A server that does not
357
+ * implement it ignores the preference, so treat this as a safety net rather
358
+ * than a guarantee, and keep the filter correct.
359
+ */
360
+ maxAffected(count) {
361
+ this.prefer.push('handling=strict', `max-affected=${count}`);
362
+ return this;
363
+ }
364
+ /**
365
+ * Roll the transaction back after running the query, so nothing is persisted.
366
+ * Useful for validating a write, or previewing what it would return.
367
+ */
368
+ rollback() {
369
+ this.prefer.push('tx=rollback');
370
+ return this;
371
+ }
372
+ /** Ask for GeoJSON instead of rows. The result resolves to the parsed object. */
373
+ geojson() {
374
+ this.accept = 'application/geo+json';
375
+ this.responseKind = 'text-json';
376
+ return this;
377
+ }
378
+ /** Ask for `text/csv` instead of JSON. The result resolves to a string. */
379
+ csv() {
380
+ this.accept = 'text/csv';
381
+ this.responseKind = 'text';
382
+ return this;
383
+ }
384
+ /** Ask the server for the query plan. Admin-only, and off by default. */
385
+ explain(options = {}) {
386
+ const format = options.format ?? 'text';
387
+ const flags = ['analyze', 'verbose', 'settings', 'buffers', 'wal']
388
+ .filter(flag => options[flag])
389
+ .join('|');
390
+ const forMediatype = this.accept ?? 'application/json';
391
+ this.accept = `application/vnd.pgrst.plan+${format}; for="${forMediatype}"; options=${flags};`;
392
+ this.responseKind = format === 'json' ? 'text-json' : 'text';
393
+ return this;
394
+ }
395
+ single() {
396
+ this.rowMode = 'single';
397
+ return this;
398
+ }
399
+ maybeSingle() {
400
+ this.rowMode = 'maybeSingle';
401
+ return this;
402
+ }
403
+ // --- execution ---------------------------------------------------------
404
+ /** The URL path (with query string) this builder targets. Exposed for tests. */
405
+ toPath() {
406
+ const params = new URLSearchParams();
407
+ if (this.columns && this.columns !== '*')
408
+ params.set('select', this.columns);
409
+ for (const [key, value] of this.extras)
410
+ params.append(key, value);
411
+ // `append`, never `set`: two filters on one column are two conditions.
412
+ this.filters.forEach((value, key) => params.append(key, value));
413
+ for (const [prefix, parts] of this.orderParts) {
414
+ if (parts.length)
415
+ params.append(scopedKey(prefix, 'order'), parts.join(','));
416
+ }
417
+ for (const [prefix, value] of this.limits) {
418
+ params.append(scopedKey(prefix, 'limit'), String(value));
419
+ }
420
+ for (const [prefix, value] of this.offsets) {
421
+ params.append(scopedKey(prefix, 'offset'), String(value));
422
+ }
423
+ const query = params.toString();
424
+ return `${contractPath.rest(this.model)}${query ? `?${query}` : ''}`;
425
+ }
426
+ /**
427
+ * The request this builder would send, as data.
428
+ *
429
+ * `client.transaction()` needs to describe several writes without issuing
430
+ * them, and the method and body are otherwise private. Exposed rather than
431
+ * reached into: a batch built from `(builder as any).method` would break the
432
+ * first time this class was refactored.
433
+ */
434
+ toRequest() {
435
+ if (this.prefer.length || Object.keys(this.extraHeaders).length || this.countOption
436
+ || this.accept || this.signal || this.rowMode !== 'many' || this.shouldThrow) {
437
+ throw new Error('transaction(): per-operation preferences, headers, signals and result modifiers are not supported by the batch endpoint.');
438
+ }
439
+ const path = this.toPath();
440
+ const queryString = path.includes('?') ? path.slice(path.indexOf('?') + 1) : '';
441
+ const query = {};
442
+ // Repeated keys are two conditions on one column, never one overwriting the
443
+ // other, so the value is always a list.
444
+ // `forEach` rather than iteration: this package targets a lib without the
445
+ // URLSearchParams iterator declaration, and forEach is in every runtime.
446
+ new URLSearchParams(queryString).forEach((value, key) => {
447
+ (query[key] ?? (query[key] = [])).push(value);
448
+ });
449
+ return { method: this.method, model: this.model, query, body: this.body };
450
+ }
451
+ /** The headers this builder sends. Exposed for tests alongside `toPath()`. */
452
+ toHeaders() {
453
+ const headers = { ...this.extraHeaders };
454
+ const prefer = [...this.prefer];
455
+ if (this.countOption)
456
+ prefer.push(`count=${this.countOption}`);
457
+ // Use the same write contract with and without compat mode.
458
+ if (this.isWrite())
459
+ prefer.push(`return=${this.selectCalled ? 'representation' : 'minimal'}`);
460
+ if (prefer.length)
461
+ headers['Prefer'] = prefer.join(',');
462
+ if (this.accept)
463
+ headers['Accept'] = this.accept;
464
+ return headers;
465
+ }
466
+ async execute() {
467
+ if (this.transactionOnly) {
468
+ throw new Error('transaction(): do not await individual operations; the batch executes them together.');
469
+ }
470
+ const path = this.toPath();
471
+ const headers = this.toHeaders();
472
+ try {
473
+ if (this.responseKind !== 'json') {
474
+ const res = await this.http.requestRaw(path, {
475
+ method: this.method,
476
+ body: this.body,
477
+ headers,
478
+ signal: this.signal,
479
+ });
480
+ const text = await res.text();
481
+ const data = this.responseKind === 'text-json' ? safeJson(text) : text;
482
+ return { data, error: null, count: parseContentRange(res.headers.get('content-range')) };
483
+ }
484
+ const result = await this.http.requestWithHeaders(path, {
485
+ method: this.method,
486
+ body: this.body,
487
+ headers,
488
+ signal: this.signal,
489
+ });
490
+ const count = parseContentRange(result.headers.get('content-range'));
491
+ // A HEAD request has no body by definition: the count is the whole answer.
492
+ if (this.headOnly)
493
+ return { data: null, error: null, count };
494
+ // `return=minimal` was sent: the write happened, there are no rows to
495
+ // report, and supabase-js resolves `{ data: null }` for exactly this case.
496
+ if (this.isWrite() && !this.selectCalled) {
497
+ return { data: null, error: null, count };
498
+ }
499
+ const rows = result.data;
500
+ return this.finish(Array.isArray(rows) ? rows : rows == null ? [] : [rows], count);
501
+ }
502
+ catch (err) {
503
+ const error = toError(err);
504
+ // A filter matching nothing is a 404 here and an empty array in
505
+ // supabase-js. Under compat the write resolves empty, which is what
506
+ // ported code branches on (`if (!data.length)`), instead of a thrown or
507
+ // surfaced error it never had a handler for.
508
+ if (this.compat && error.status === 404 && (this.method === 'PATCH' || this.method === 'DELETE')) {
509
+ return this.finish([], 0);
510
+ }
511
+ return { data: null, error, count: null };
512
+ }
513
+ }
514
+ isWrite() {
515
+ return this.method === 'POST' || this.method === 'PATCH' || this.method === 'DELETE';
516
+ }
517
+ /** Apply `single()` / `maybeSingle()` to a row list. The one place row mode is read. */
518
+ finish(list, count) {
519
+ if (this.rowMode === 'single' || this.rowMode === 'maybeSingle') {
520
+ if (list.length > 1 || (this.rowMode === 'single' && list.length === 0)) {
521
+ const error = {
522
+ message: 'JSON object requested, multiple (or no) rows returned',
523
+ code: 'PGRST116',
524
+ };
525
+ return { data: null, error, count };
526
+ }
527
+ return { data: list.length ? list[0] : null, error: null, count };
528
+ }
529
+ return { data: list, error: null, count };
530
+ }
531
+ then(onfulfilled, onrejected) {
532
+ // `throwOnError()` is applied here rather than inside execute() so every
533
+ // builder variant (single, csv, explain, geojson) inherits it: they are all
534
+ // the same object, cast, and `then` is the one path they share.
535
+ const settled = this.execute().then(result => {
536
+ if (this.shouldThrow && result.error) {
537
+ throw Object.assign(new Error(result.error.message), result.error);
538
+ }
539
+ return result;
540
+ });
541
+ return settled.then(onfulfilled, onrejected);
542
+ }
543
+ }
544
+ //# sourceMappingURL=query-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../../src/postgrest/query-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { HttpClient } from '../http/index.js';
2
+ import type { PostgrestResponse, RpcOptions } from './types.js';
3
+ /**
4
+ * The one `/rpc/` transport, for `rpc()` and for every `schema(name).rpc()`.
5
+ *
6
+ * A schema other than `public` rides in the profile header PostgREST defines:
7
+ * `Content-Profile` when there is a body, `Accept-Profile` on GET and HEAD.
8
+ * The server serves only the schemas a feature has exposed and answers any
9
+ * other with PGRST106, so nothing here needs to know which ones those are.
10
+ */
11
+ export declare function callRpc<Result>(http: HttpClient, schema: string, fn: string, args: unknown, options: RpcOptions): Promise<PostgrestResponse<Result>>;
12
+ //# sourceMappingURL=rpc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../src/postgrest/rpc.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGhE;;;;;;;GAOG;AACH,wBAAsB,OAAO,CAAC,MAAM,EAChC,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,UAAU,GACpB,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CA0BpC"}
@@ -0,0 +1,42 @@
1
+ import { contractPath } from '@motherbase/contracts';
2
+ import { toError } from '../http/utils.js';
3
+ import { parseContentRange } from './utils.js';
4
+ /**
5
+ * The one `/rpc/` transport, for `rpc()` and for every `schema(name).rpc()`.
6
+ *
7
+ * A schema other than `public` rides in the profile header PostgREST defines:
8
+ * `Content-Profile` when there is a body, `Accept-Profile` on GET and HEAD.
9
+ * The server serves only the schemas a feature has exposed and answers any
10
+ * other with PGRST106, so nothing here needs to know which ones those are.
11
+ */
12
+ export async function callRpc(http, schema, fn, args, options) {
13
+ try {
14
+ const method = options.head ? 'HEAD' : options.get ? 'GET' : 'POST';
15
+ const params = new URLSearchParams();
16
+ if (method !== 'POST') {
17
+ for (const [name, value] of Object.entries((args ?? {}))) {
18
+ if (value === undefined)
19
+ continue;
20
+ params.append(name, Array.isArray(value) ? `{${value.join(',')}}` : String(value));
21
+ }
22
+ }
23
+ const query = params.toString();
24
+ const path = `${contractPath.rest('rpc')}/${encodeURIComponent(fn)}${query ? `?${query}` : ''}`;
25
+ const headers = {};
26
+ if (options.count)
27
+ headers.Prefer = `count=${options.count}`;
28
+ if (schema !== 'public')
29
+ headers[method === 'POST' ? 'Content-Profile' : 'Accept-Profile'] = schema;
30
+ const result = await http.requestWithHeaders(path, {
31
+ method,
32
+ body: method === 'POST' ? (args ?? {}) : undefined,
33
+ headers,
34
+ });
35
+ const count = parseContentRange(result.headers.get('content-range'));
36
+ return { data: options.head ? null : result.data, error: null, count };
37
+ }
38
+ catch (err) {
39
+ return { data: null, error: toError(err), count: null };
40
+ }
41
+ }
42
+ //# sourceMappingURL=rpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc.js","sourceRoot":"","sources":["../../src/postgrest/rpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CACzB,IAAgB,EAChB,MAAc,EACd,EAAU,EACV,IAAa,EACb,OAAmB;IAEnB,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACpE,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACpB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC,EAAE,CAAC;gBAClF,IAAI,KAAK,KAAK,SAAS;oBAAE,SAAS;gBAClC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YACvF,CAAC;QACL,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,kBAAkB,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAChG,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,IAAI,OAAO,CAAC,KAAK;YAAE,OAAO,CAAC,MAAM,GAAG,SAAS,OAAO,CAAC,KAAK,EAAE,CAAC;QAC7D,IAAI,MAAM,KAAK,QAAQ;YAAE,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC;QAEpG,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAS,IAAI,EAAE;YACvD,MAAM;YACN,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;YAClD,OAAO;SACV,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;QACrE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAC3E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC5D,CAAC;AACL,CAAC"}