@pawabase/client 0.0.0-stage → 0.1.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 (243) hide show
  1. package/README.md +313 -2
  2. package/dist/cjs/admin.d.ts +187 -0
  3. package/dist/cjs/admin.d.ts.map +1 -0
  4. package/dist/cjs/admin.js +235 -0
  5. package/dist/cjs/admin.js.map +1 -0
  6. package/dist/cjs/auth.d.ts +448 -0
  7. package/dist/cjs/auth.d.ts.map +1 -0
  8. package/dist/cjs/auth.js +1016 -0
  9. package/dist/cjs/auth.js.map +1 -0
  10. package/dist/cjs/client.d.ts +103 -0
  11. package/dist/cjs/client.d.ts.map +1 -0
  12. package/dist/cjs/client.js +144 -0
  13. package/dist/cjs/client.js.map +1 -0
  14. package/dist/cjs/data.d.ts +220 -0
  15. package/dist/cjs/data.d.ts.map +1 -0
  16. package/dist/cjs/data.js +490 -0
  17. package/dist/cjs/data.js.map +1 -0
  18. package/dist/cjs/errors.d.ts +167 -0
  19. package/dist/cjs/errors.d.ts.map +1 -0
  20. package/dist/cjs/errors.js +316 -0
  21. package/dist/cjs/errors.js.map +1 -0
  22. package/dist/cjs/files.d.ts +80 -0
  23. package/dist/cjs/files.d.ts.map +1 -0
  24. package/dist/cjs/files.js +167 -0
  25. package/dist/cjs/files.js.map +1 -0
  26. package/dist/cjs/functions.d.ts +66 -0
  27. package/dist/cjs/functions.d.ts.map +1 -0
  28. package/dist/cjs/functions.js +109 -0
  29. package/dist/cjs/functions.js.map +1 -0
  30. package/dist/cjs/http.d.ts +101 -0
  31. package/dist/cjs/http.d.ts.map +1 -0
  32. package/dist/cjs/http.js +249 -0
  33. package/dist/cjs/http.js.map +1 -0
  34. package/dist/cjs/index.d.ts +22 -0
  35. package/dist/cjs/index.d.ts.map +1 -0
  36. package/dist/cjs/index.js +45 -0
  37. package/dist/cjs/index.js.map +1 -0
  38. package/dist/cjs/manage/access.d.ts +136 -0
  39. package/dist/cjs/manage/access.d.ts.map +1 -0
  40. package/dist/cjs/manage/access.js +162 -0
  41. package/dist/cjs/manage/access.js.map +1 -0
  42. package/dist/cjs/manage/automation.d.ts +106 -0
  43. package/dist/cjs/manage/automation.d.ts.map +1 -0
  44. package/dist/cjs/manage/automation.js +144 -0
  45. package/dist/cjs/manage/automation.js.map +1 -0
  46. package/dist/cjs/manage/base.d.ts +52 -0
  47. package/dist/cjs/manage/base.d.ts.map +1 -0
  48. package/dist/cjs/manage/base.js +69 -0
  49. package/dist/cjs/manage/base.js.map +1 -0
  50. package/dist/cjs/manage/data.d.ts +100 -0
  51. package/dist/cjs/manage/data.d.ts.map +1 -0
  52. package/dist/cjs/manage/data.js +141 -0
  53. package/dist/cjs/manage/data.js.map +1 -0
  54. package/dist/cjs/manage/files.d.ts +45 -0
  55. package/dist/cjs/manage/files.d.ts.map +1 -0
  56. package/dist/cjs/manage/files.js +73 -0
  57. package/dist/cjs/manage/files.js.map +1 -0
  58. package/dist/cjs/manage/functions.d.ts +48 -0
  59. package/dist/cjs/manage/functions.d.ts.map +1 -0
  60. package/dist/cjs/manage/functions.js +61 -0
  61. package/dist/cjs/manage/functions.js.map +1 -0
  62. package/dist/cjs/manage/index.d.ts +76 -0
  63. package/dist/cjs/manage/index.d.ts.map +1 -0
  64. package/dist/cjs/manage/index.js +134 -0
  65. package/dist/cjs/manage/index.js.map +1 -0
  66. package/dist/cjs/manage/lifecycle.d.ts +128 -0
  67. package/dist/cjs/manage/lifecycle.d.ts.map +1 -0
  68. package/dist/cjs/manage/lifecycle.js +167 -0
  69. package/dist/cjs/manage/lifecycle.js.map +1 -0
  70. package/dist/cjs/manage/mail.d.ts +16 -0
  71. package/dist/cjs/manage/mail.d.ts.map +1 -0
  72. package/dist/cjs/manage/mail.js +24 -0
  73. package/dist/cjs/manage/mail.js.map +1 -0
  74. package/dist/cjs/manage/observe.d.ts +149 -0
  75. package/dist/cjs/manage/observe.d.ts.map +1 -0
  76. package/dist/cjs/manage/observe.js +168 -0
  77. package/dist/cjs/manage/observe.js.map +1 -0
  78. package/dist/cjs/manage/realtime.d.ts +52 -0
  79. package/dist/cjs/manage/realtime.d.ts.map +1 -0
  80. package/dist/cjs/manage/realtime.js +71 -0
  81. package/dist/cjs/manage/realtime.js.map +1 -0
  82. package/dist/cjs/package.json +1 -0
  83. package/dist/cjs/realtime.d.ts +207 -0
  84. package/dist/cjs/realtime.d.ts.map +1 -0
  85. package/dist/cjs/realtime.js +704 -0
  86. package/dist/cjs/realtime.js.map +1 -0
  87. package/dist/cjs/session-store.d.ts +16 -0
  88. package/dist/cjs/session-store.d.ts.map +1 -0
  89. package/dist/cjs/session-store.js +37 -0
  90. package/dist/cjs/session-store.js.map +1 -0
  91. package/dist/cjs/typegen.d.ts +26 -0
  92. package/dist/cjs/typegen.d.ts.map +1 -0
  93. package/dist/cjs/typegen.js +167 -0
  94. package/dist/cjs/typegen.js.map +1 -0
  95. package/dist/cjs/types.d.ts +178 -0
  96. package/dist/cjs/types.d.ts.map +1 -0
  97. package/dist/cjs/types.js +4 -0
  98. package/dist/cjs/types.js.map +1 -0
  99. package/dist/cjs/util.d.ts +27 -0
  100. package/dist/cjs/util.d.ts.map +1 -0
  101. package/dist/cjs/util.js +115 -0
  102. package/dist/cjs/util.js.map +1 -0
  103. package/dist/cjs/version.d.ts +2 -0
  104. package/dist/cjs/version.d.ts.map +1 -0
  105. package/dist/cjs/version.js +5 -0
  106. package/dist/cjs/version.js.map +1 -0
  107. package/dist/esm/admin.d.ts +187 -0
  108. package/dist/esm/admin.d.ts.map +1 -0
  109. package/dist/esm/admin.js +222 -0
  110. package/dist/esm/admin.js.map +1 -0
  111. package/dist/esm/auth.d.ts +448 -0
  112. package/dist/esm/auth.d.ts.map +1 -0
  113. package/dist/esm/auth.js +1012 -0
  114. package/dist/esm/auth.js.map +1 -0
  115. package/dist/esm/cli/gen-types.d.ts +2 -0
  116. package/dist/esm/cli/gen-types.d.ts.map +1 -0
  117. package/dist/esm/cli/gen-types.js +100 -0
  118. package/dist/esm/cli/gen-types.js.map +1 -0
  119. package/dist/esm/client.d.ts +103 -0
  120. package/dist/esm/client.d.ts.map +1 -0
  121. package/dist/esm/client.js +139 -0
  122. package/dist/esm/client.js.map +1 -0
  123. package/dist/esm/data.d.ts +220 -0
  124. package/dist/esm/data.d.ts.map +1 -0
  125. package/dist/esm/data.js +485 -0
  126. package/dist/esm/data.js.map +1 -0
  127. package/dist/esm/errors.d.ts +167 -0
  128. package/dist/esm/errors.d.ts.map +1 -0
  129. package/dist/esm/errors.js +293 -0
  130. package/dist/esm/errors.js.map +1 -0
  131. package/dist/esm/files.d.ts +80 -0
  132. package/dist/esm/files.d.ts.map +1 -0
  133. package/dist/esm/files.js +162 -0
  134. package/dist/esm/files.js.map +1 -0
  135. package/dist/esm/functions.d.ts +66 -0
  136. package/dist/esm/functions.d.ts.map +1 -0
  137. package/dist/esm/functions.js +103 -0
  138. package/dist/esm/functions.js.map +1 -0
  139. package/dist/esm/http.d.ts +101 -0
  140. package/dist/esm/http.d.ts.map +1 -0
  141. package/dist/esm/http.js +245 -0
  142. package/dist/esm/http.js.map +1 -0
  143. package/dist/esm/index.d.ts +22 -0
  144. package/dist/esm/index.d.ts.map +1 -0
  145. package/dist/esm/index.js +12 -0
  146. package/dist/esm/index.js.map +1 -0
  147. package/dist/esm/manage/access.d.ts +136 -0
  148. package/dist/esm/manage/access.d.ts.map +1 -0
  149. package/dist/esm/manage/access.js +155 -0
  150. package/dist/esm/manage/access.js.map +1 -0
  151. package/dist/esm/manage/automation.d.ts +106 -0
  152. package/dist/esm/manage/automation.d.ts.map +1 -0
  153. package/dist/esm/manage/automation.js +134 -0
  154. package/dist/esm/manage/automation.js.map +1 -0
  155. package/dist/esm/manage/base.d.ts +52 -0
  156. package/dist/esm/manage/base.d.ts.map +1 -0
  157. package/dist/esm/manage/base.js +63 -0
  158. package/dist/esm/manage/base.js.map +1 -0
  159. package/dist/esm/manage/data.d.ts +100 -0
  160. package/dist/esm/manage/data.d.ts.map +1 -0
  161. package/dist/esm/manage/data.js +130 -0
  162. package/dist/esm/manage/data.js.map +1 -0
  163. package/dist/esm/manage/files.d.ts +45 -0
  164. package/dist/esm/manage/files.d.ts.map +1 -0
  165. package/dist/esm/manage/files.js +68 -0
  166. package/dist/esm/manage/files.js.map +1 -0
  167. package/dist/esm/manage/functions.d.ts +48 -0
  168. package/dist/esm/manage/functions.d.ts.map +1 -0
  169. package/dist/esm/manage/functions.js +57 -0
  170. package/dist/esm/manage/functions.js.map +1 -0
  171. package/dist/esm/manage/index.d.ts +76 -0
  172. package/dist/esm/manage/index.d.ts.map +1 -0
  173. package/dist/esm/manage/index.js +115 -0
  174. package/dist/esm/manage/index.js.map +1 -0
  175. package/dist/esm/manage/lifecycle.d.ts +128 -0
  176. package/dist/esm/manage/lifecycle.d.ts.map +1 -0
  177. package/dist/esm/manage/lifecycle.js +161 -0
  178. package/dist/esm/manage/lifecycle.js.map +1 -0
  179. package/dist/esm/manage/mail.d.ts +16 -0
  180. package/dist/esm/manage/mail.d.ts.map +1 -0
  181. package/dist/esm/manage/mail.js +19 -0
  182. package/dist/esm/manage/mail.js.map +1 -0
  183. package/dist/esm/manage/observe.d.ts +149 -0
  184. package/dist/esm/manage/observe.d.ts.map +1 -0
  185. package/dist/esm/manage/observe.js +161 -0
  186. package/dist/esm/manage/observe.js.map +1 -0
  187. package/dist/esm/manage/realtime.d.ts +52 -0
  188. package/dist/esm/manage/realtime.d.ts.map +1 -0
  189. package/dist/esm/manage/realtime.js +66 -0
  190. package/dist/esm/manage/realtime.js.map +1 -0
  191. package/dist/esm/package.json +1 -0
  192. package/dist/esm/realtime.d.ts +207 -0
  193. package/dist/esm/realtime.d.ts.map +1 -0
  194. package/dist/esm/realtime.js +699 -0
  195. package/dist/esm/realtime.js.map +1 -0
  196. package/dist/esm/session-store.d.ts +16 -0
  197. package/dist/esm/session-store.d.ts.map +1 -0
  198. package/dist/esm/session-store.js +32 -0
  199. package/dist/esm/session-store.js.map +1 -0
  200. package/dist/esm/typegen.d.ts +26 -0
  201. package/dist/esm/typegen.d.ts.map +1 -0
  202. package/dist/esm/typegen.js +163 -0
  203. package/dist/esm/typegen.js.map +1 -0
  204. package/dist/esm/types.d.ts +178 -0
  205. package/dist/esm/types.d.ts.map +1 -0
  206. package/dist/esm/types.js +3 -0
  207. package/dist/esm/types.js.map +1 -0
  208. package/dist/esm/util.d.ts +27 -0
  209. package/dist/esm/util.d.ts.map +1 -0
  210. package/dist/esm/util.js +102 -0
  211. package/dist/esm/util.js.map +1 -0
  212. package/dist/esm/version.d.ts +2 -0
  213. package/dist/esm/version.d.ts.map +1 -0
  214. package/dist/esm/version.js +2 -0
  215. package/dist/esm/version.js.map +1 -0
  216. package/package.json +92 -4
  217. package/src/admin.ts +311 -0
  218. package/src/auth.ts +1180 -0
  219. package/src/cli/gen-types.ts +105 -0
  220. package/src/client.ts +189 -0
  221. package/src/data.ts +576 -0
  222. package/src/errors.ts +330 -0
  223. package/src/files.ts +208 -0
  224. package/src/functions.ts +131 -0
  225. package/src/http.ts +354 -0
  226. package/src/index.ts +56 -0
  227. package/src/manage/access.ts +206 -0
  228. package/src/manage/automation.ts +162 -0
  229. package/src/manage/base.ts +83 -0
  230. package/src/manage/data.ts +159 -0
  231. package/src/manage/files.ts +79 -0
  232. package/src/manage/functions.ts +69 -0
  233. package/src/manage/index.ts +132 -0
  234. package/src/manage/lifecycle.ts +208 -0
  235. package/src/manage/mail.ts +22 -0
  236. package/src/manage/observe.ts +226 -0
  237. package/src/manage/realtime.ts +95 -0
  238. package/src/realtime.ts +765 -0
  239. package/src/session-store.ts +36 -0
  240. package/src/typegen.ts +192 -0
  241. package/src/types.ts +195 -0
  242. package/src/util.ts +114 -0
  243. package/src/version.ts +1 -0
@@ -0,0 +1,485 @@
1
+ import { InvalidQueryError, NotFoundError } from "./errors.js";
2
+ import { encodePath } from "./util.js";
3
+ function format(value, op, column) {
4
+ if (value === null)
5
+ throw new InvalidQueryError(`Filter on ${column}: null needs is()/isNot(), not ${op}.`);
6
+ if (value instanceof Date)
7
+ return value.toISOString();
8
+ if (typeof value === "bigint" || typeof value === "number")
9
+ return String(value);
10
+ if (typeof value === "boolean")
11
+ return String(value);
12
+ return value;
13
+ }
14
+ function encode(column, op, value) {
15
+ switch (op) {
16
+ case "eq":
17
+ case "neq": {
18
+ // `filter[flag]=eq.false` matches true rows on the server; booleans and null go through is/isnot.
19
+ if (value === null)
20
+ return { op: op === "eq" ? "is" : "isnot", value: "null" };
21
+ if (typeof value === "boolean")
22
+ return { op: op === "eq" ? "is" : "isnot", value: String(value) };
23
+ return { op, value: format(value, op, column) };
24
+ }
25
+ case "is":
26
+ case "isnot": {
27
+ if (value !== null && typeof value !== "boolean") {
28
+ throw new InvalidQueryError(`Filter on ${column}: ${op} takes null, true or false.`);
29
+ }
30
+ return { op, value: String(value) };
31
+ }
32
+ case "in":
33
+ case "nin": {
34
+ if (!Array.isArray(value))
35
+ throw new InvalidQueryError(`Filter on ${column}: ${op} takes an array.`);
36
+ if (value.length === 0)
37
+ return op === "in" ? { empty: true } : { skip: true };
38
+ const parts = value.map((item) => format(item, op, column));
39
+ const bad = parts.find((part) => part.includes(","));
40
+ if (bad !== undefined) {
41
+ throw new InvalidQueryError(`Filter on ${column}: the value ${JSON.stringify(bad)} contains a comma, and the server splits ${op} lists on commas.`);
42
+ }
43
+ return { op, value: parts.join(",") };
44
+ }
45
+ case "like":
46
+ case "ilike":
47
+ if (typeof value !== "string")
48
+ throw new InvalidQueryError(`Filter on ${column}: ${op} takes a string pattern.`);
49
+ return { op, value };
50
+ default:
51
+ return { op, value: format(value, op, column) };
52
+ }
53
+ }
54
+ /**
55
+ * A query on one resource. Builders are immutable: every method returns a new one, so
56
+ * a base query can be reused. It is also a promise, so `await` runs it.
57
+ *
58
+ * ```ts
59
+ * const page = await client.from("posts").eq("status", "live").order("created_at", "desc").perPage(20);
60
+ * for await (const post of client.from("posts").eq("status", "live")) { … }
61
+ * ```
62
+ */
63
+ export class QueryBuilder {
64
+ http;
65
+ resource;
66
+ state;
67
+ options;
68
+ constructor(http, resource, state = {
69
+ filters: new Map(),
70
+ sort: [],
71
+ select: null,
72
+ expand: [],
73
+ page: 1,
74
+ perPage: null,
75
+ empty: false,
76
+ }, options = {}) {
77
+ this.http = http;
78
+ this.resource = resource;
79
+ this.state = state;
80
+ this.options = options;
81
+ }
82
+ with(patch, options) {
83
+ return new QueryBuilder(this.http, this.resource, { ...this.state, filters: new Map(this.state.filters), ...patch }, { ...this.options, ...options });
84
+ }
85
+ // ── filters ───────────────────────────────────────────────────────────
86
+ /**
87
+ * Add a filter. The server accepts one filter per field and keeps only the last when
88
+ * a field repeats, so a second filter on the same field throws instead of silently
89
+ * dropping one. For a two-sided range, see the docs (a stored period field, or a route).
90
+ */
91
+ filter(column, op, value) {
92
+ if (this.state.filters.has(column)) {
93
+ throw new InvalidQueryError(`There is already a filter on "${column}". The server applies one filter per field and drops the others, so a range with two bounds on one field cannot be written as a single list request.`);
94
+ }
95
+ const encoded = encode(column, op, value);
96
+ const filters = new Map(this.state.filters);
97
+ if ("empty" in encoded)
98
+ return this.with({ empty: true, filters });
99
+ if ("skip" in encoded)
100
+ return this.with({ filters });
101
+ filters.set(column, `${encoded.op}.${encoded.value}`);
102
+ return this.with({ filters });
103
+ }
104
+ eq(column, value) {
105
+ return this.filter(column, "eq", value);
106
+ }
107
+ neq(column, value) {
108
+ return this.filter(column, "neq", value);
109
+ }
110
+ gt(column, value) {
111
+ return this.filter(column, "gt", value);
112
+ }
113
+ gte(column, value) {
114
+ return this.filter(column, "gte", value);
115
+ }
116
+ lt(column, value) {
117
+ return this.filter(column, "lt", value);
118
+ }
119
+ lte(column, value) {
120
+ return this.filter(column, "lte", value);
121
+ }
122
+ /** Pattern match. `*` and `%` match any run of characters. Whether it ignores case depends on the database. */
123
+ like(column, pattern) {
124
+ return this.filter(column, "like", pattern);
125
+ }
126
+ /** Case-insensitive match on PostgreSQL; on other databases the same as {@link like}. */
127
+ ilike(column, pattern) {
128
+ return this.filter(column, "ilike", pattern);
129
+ }
130
+ /** Matches any of the values. Values cannot contain commas. An empty list matches nothing. */
131
+ in(column, values) {
132
+ return this.filter(column, "in", values);
133
+ }
134
+ notIn(column, values) {
135
+ return this.filter(column, "nin", values);
136
+ }
137
+ /** `null`, `true` or `false`. The right way to test booleans. */
138
+ is(column, value) {
139
+ return this.filter(column, "is", value);
140
+ }
141
+ isNot(column, value) {
142
+ return this.filter(column, "isnot", value);
143
+ }
144
+ /** Several filters at once: `{ status: "live", views: { gte: 10 } }`. */
145
+ where(conditions) {
146
+ let query = this;
147
+ for (const [column, condition] of Object.entries(conditions)) {
148
+ if (condition === undefined)
149
+ continue;
150
+ if (typeof condition === "object" && condition !== null && !(condition instanceof Date)) {
151
+ const entries = Object.entries(condition);
152
+ if (entries.length !== 1) {
153
+ throw new InvalidQueryError(`where(): "${column}" has ${entries.length} operators; the server takes one filter per field.`);
154
+ }
155
+ const [op, value] = entries[0];
156
+ query = query.filter(column, op, value);
157
+ }
158
+ else {
159
+ query = query.filter(column, "eq", condition);
160
+ }
161
+ }
162
+ return query;
163
+ }
164
+ // ── shape ─────────────────────────────────────────────────────────────
165
+ /** Order by a column. Call again for tie-breakers. The default order is the primary key. */
166
+ order(column, direction = "asc") {
167
+ return this.with({ sort: [...this.state.sort, `${direction === "desc" ? "-" : ""}${column}`] });
168
+ }
169
+ /**
170
+ * Ask for only these columns (the primary key is always included). Columns you leave out
171
+ * still appear in each row, but as `null`, so the result type keeps them optional.
172
+ */
173
+ select(...columns) {
174
+ return this.with({ select: columns });
175
+ }
176
+ /** Embed `belongs_to` / `has_many` relations declared on the resource. */
177
+ expand(...relations) {
178
+ return this.with({ expand: [...this.state.expand, ...relations] });
179
+ }
180
+ /** The 1-based page. */
181
+ page(page) {
182
+ return this.with({ page });
183
+ }
184
+ /** Rows per page. The server allows 1 to 200 (20 by default). */
185
+ perPage(perPage) {
186
+ return this.with({ perPage });
187
+ }
188
+ /** Alias of {@link perPage}. */
189
+ limit(count) {
190
+ return this.perPage(count);
191
+ }
192
+ /** Abort or time-limit this query. */
193
+ withOptions(options) {
194
+ return this.with({}, options);
195
+ }
196
+ // ── running ───────────────────────────────────────────────────────────
197
+ params() {
198
+ const params = {};
199
+ for (const [column, value] of this.state.filters)
200
+ params[`filter[${column}]`] = value;
201
+ if (this.state.sort.length)
202
+ params["sort"] = this.state.sort.join(",");
203
+ if (this.state.select)
204
+ params["select"] = this.state.select.join(",");
205
+ if (this.state.expand.length)
206
+ params["expand"] = [...new Set(this.state.expand)].join(",");
207
+ if (this.state.page !== 1)
208
+ params["page"] = this.state.page;
209
+ if (this.state.perPage !== null)
210
+ params["per_page"] = this.state.perPage;
211
+ return params;
212
+ }
213
+ /** Run the query and return one page. `await`ing the builder does the same. */
214
+ async execute() {
215
+ if (this.state.empty) {
216
+ return { data: [], page: this.state.page, per_page: this.state.perPage ?? 20, total: 0 };
217
+ }
218
+ return this.http.request({
219
+ path: `/rest/v1/${encodePath(this.resource)}`,
220
+ query: this.params(),
221
+ signal: this.options.signal,
222
+ ...(this.options.timeoutMs !== undefined ? { timeoutMs: this.options.timeoutMs } : {}),
223
+ });
224
+ }
225
+ then(onfulfilled, onrejected) {
226
+ return this.execute().then(onfulfilled, onrejected);
227
+ }
228
+ /** The first matching row, or `null`. */
229
+ async first() {
230
+ const page = await this.perPage(1).page(1).execute();
231
+ return page.data[0] ?? null;
232
+ }
233
+ /** The first matching row; throws {@link NotFoundError} when there is none. */
234
+ async single() {
235
+ const row = await this.first();
236
+ if (row === null) {
237
+ throw new NotFoundError({ status: 404, code: "not_found", message: `No ${this.resource} record matches.` });
238
+ }
239
+ return row;
240
+ }
241
+ /**
242
+ * How many rows match. Throws when the server cannot count (a per-row policy
243
+ * makes `total` unknowable); use {@link all} and count instead.
244
+ */
245
+ async count() {
246
+ const page = await this.perPage(1).page(1).execute();
247
+ if (page.total === null) {
248
+ throw new InvalidQueryError(`The server cannot count ${this.resource} for this caller: a per-row policy makes the total unknown. Fetch the rows with all() and count them.`);
249
+ }
250
+ return page.total;
251
+ }
252
+ /** Whether any row matches. */
253
+ async exists() {
254
+ return (await this.first()) !== null;
255
+ }
256
+ /** Walk the result one page at a time, from the current page on. */
257
+ async *pages(options = {}) {
258
+ const pageSize = options.pageSize ?? this.state.perPage ?? 100;
259
+ const stopAfterEmpty = Math.max(1, options.stopAfterEmptyPages ?? 1);
260
+ let query = this.perPage(pageSize).withOptions({
261
+ ...(options.signal !== undefined ? { signal: options.signal } : {}),
262
+ ...(options.timeoutMs !== undefined ? { timeoutMs: options.timeoutMs } : {}),
263
+ });
264
+ let seen = 0;
265
+ let empties = 0;
266
+ for (;;) {
267
+ const page = await query.execute();
268
+ yield page;
269
+ seen += page.data.length;
270
+ if (options.maxRecords !== undefined && seen >= options.maxRecords)
271
+ return;
272
+ if (page.total !== null) {
273
+ if (page.page * page.per_page >= page.total)
274
+ return;
275
+ }
276
+ else {
277
+ // Unknown total: a per-row policy filters after the page is read, so a short page proves nothing.
278
+ empties = page.data.length === 0 ? empties + 1 : 0;
279
+ if (empties >= stopAfterEmpty)
280
+ return;
281
+ }
282
+ query = query.page(page.page + 1);
283
+ }
284
+ }
285
+ /** Every matching row, across pages. Mind the cost on large tables; `maxRecords` caps it. */
286
+ async all(options = {}) {
287
+ const rows = [];
288
+ for await (const page of this.pages(options)) {
289
+ rows.push(...page.data);
290
+ if (options.maxRecords !== undefined && rows.length >= options.maxRecords)
291
+ break;
292
+ }
293
+ return options.maxRecords !== undefined ? rows.slice(0, options.maxRecords) : rows;
294
+ }
295
+ /** Iterate rows lazily: `for await (const row of query)`. */
296
+ async *[Symbol.asyncIterator]() {
297
+ for await (const page of this.pages())
298
+ yield* page.data;
299
+ }
300
+ }
301
+ /** Create, read, update and delete records of one resource. */
302
+ export class ResourceClient {
303
+ http;
304
+ name;
305
+ constructor(http, name) {
306
+ this.http = http;
307
+ this.name = name;
308
+ }
309
+ path(id) {
310
+ const base = `/rest/v1/${encodePath(this.name)}`;
311
+ return id === undefined ? base : `${base}/${encodeURIComponent(String(id))}`;
312
+ }
313
+ /** Start a query. Every filter and shape method below is a shortcut for `query().…`. */
314
+ query() {
315
+ return new QueryBuilder(this.http, this.name);
316
+ }
317
+ /** One page of records, using plain parameters. For anything richer, build a query. */
318
+ list(params = {}) {
319
+ let query = this.query();
320
+ if (params.where)
321
+ query = query.where(params.where);
322
+ const specs = typeof params.sort === "string" ? params.sort.split(",") : (params.sort ?? []);
323
+ for (const spec of specs.map((s) => s.trim()).filter(Boolean)) {
324
+ query = spec.startsWith("-") ? query.order(spec.slice(1), "desc") : query.order(spec.replace(/^\+/, ""));
325
+ }
326
+ if (params.select)
327
+ query = query.select(...params.select);
328
+ if (params.expand)
329
+ query = query.expand(...params.expand);
330
+ if (params.page)
331
+ query = query.page(params.page);
332
+ if (params.perPage)
333
+ query = query.perPage(params.perPage);
334
+ if (params.signal)
335
+ query = query.withOptions({ signal: params.signal });
336
+ return query.execute();
337
+ }
338
+ where(conditions) {
339
+ return this.query().where(conditions);
340
+ }
341
+ filter(column, op, value) {
342
+ return this.query().filter(column, op, value);
343
+ }
344
+ eq(column, value) {
345
+ return this.query().eq(column, value);
346
+ }
347
+ neq(column, value) {
348
+ return this.query().neq(column, value);
349
+ }
350
+ gt(column, value) {
351
+ return this.query().gt(column, value);
352
+ }
353
+ gte(column, value) {
354
+ return this.query().gte(column, value);
355
+ }
356
+ lt(column, value) {
357
+ return this.query().lt(column, value);
358
+ }
359
+ lte(column, value) {
360
+ return this.query().lte(column, value);
361
+ }
362
+ like(column, pattern) {
363
+ return this.query().like(column, pattern);
364
+ }
365
+ ilike(column, pattern) {
366
+ return this.query().ilike(column, pattern);
367
+ }
368
+ in(column, values) {
369
+ return this.query().in(column, values);
370
+ }
371
+ notIn(column, values) {
372
+ return this.query().notIn(column, values);
373
+ }
374
+ is(column, value) {
375
+ return this.query().is(column, value);
376
+ }
377
+ isNot(column, value) {
378
+ return this.query().isNot(column, value);
379
+ }
380
+ order(column, direction = "asc") {
381
+ return this.query().order(column, direction);
382
+ }
383
+ select(...columns) {
384
+ return this.query().select(...columns);
385
+ }
386
+ expand(...relations) {
387
+ return this.query().expand(...relations);
388
+ }
389
+ page(page) {
390
+ return this.query().page(page);
391
+ }
392
+ perPage(count) {
393
+ return this.query().perPage(count);
394
+ }
395
+ limit(count) {
396
+ return this.query().perPage(count);
397
+ }
398
+ /** The first record in the default order, or `null`. */
399
+ first() {
400
+ return this.query().first();
401
+ }
402
+ /** How many records the caller can see. See {@link QueryBuilder.count}. */
403
+ count() {
404
+ return this.query().count();
405
+ }
406
+ /** Every record, across pages. See {@link QueryBuilder.all}. */
407
+ all(options = {}) {
408
+ return this.query().all(options);
409
+ }
410
+ /** Walk every record page by page. */
411
+ pages(options = {}) {
412
+ return this.query().pages(options);
413
+ }
414
+ /** Iterate every record lazily: `for await (const row of client.from("posts"))`. */
415
+ [Symbol.asyncIterator]() {
416
+ return this.query()[Symbol.asyncIterator]();
417
+ }
418
+ /** One record. `404` also means "a read policy hides it": see {@link maybeGet}. */
419
+ get(id, options = {}) {
420
+ return this.http.request({
421
+ path: this.path(id),
422
+ ...(options.expand?.length ? { query: { expand: options.expand.join(",") } } : {}),
423
+ signal: options.signal,
424
+ ...(options.timeoutMs !== undefined ? { timeoutMs: options.timeoutMs } : {}),
425
+ });
426
+ }
427
+ /** Like {@link get}, but `null` when there is no such record (or a policy hides it). */
428
+ async maybeGet(id, options = {}) {
429
+ try {
430
+ return await this.get(id, options);
431
+ }
432
+ catch (error) {
433
+ if (error instanceof NotFoundError)
434
+ return null;
435
+ throw error;
436
+ }
437
+ }
438
+ /** Create a record; returns it with its server-assigned fields (`id`, timestamps, defaults). */
439
+ create(row, options = {}) {
440
+ return this.http.request({ method: "POST", path: this.path(), body: row, signal: options.signal });
441
+ }
442
+ /**
443
+ * Create several records, a few at a time. This is **not atomic**: some can succeed while
444
+ * others fail, so the result lists both. With `stopOnError`, no new request starts after
445
+ * the first failure.
446
+ */
447
+ async createMany(rows, options = {}) {
448
+ const result = { created: [], failed: [] };
449
+ const slots = new Array(rows.length);
450
+ let next = 0;
451
+ let stop = false;
452
+ const worker = async () => {
453
+ while (!stop) {
454
+ const index = next++;
455
+ if (index >= rows.length)
456
+ return;
457
+ try {
458
+ slots[index] = await this.create(rows[index], options);
459
+ }
460
+ catch (error) {
461
+ result.failed.push({ index, error });
462
+ if (options.stopOnError)
463
+ stop = true;
464
+ }
465
+ }
466
+ };
467
+ await Promise.all(Array.from({ length: Math.max(1, Math.min(options.concurrency ?? 5, rows.length)) }, worker));
468
+ result.created = slots.filter((row) => row !== undefined);
469
+ result.failed.sort((a, b) => a.index - b.index);
470
+ return result;
471
+ }
472
+ /** Change the listed fields. (A `PATCH` accepts `null` for any field, even a required one.) */
473
+ update(id, patch, options = {}) {
474
+ return this.http.request({ method: "PATCH", path: this.path(id), body: patch, signal: options.signal });
475
+ }
476
+ /** Replace the record (`PUT`). */
477
+ replace(id, row, options = {}) {
478
+ return this.http.request({ method: "PUT", path: this.path(id), body: row, signal: options.signal });
479
+ }
480
+ /** Delete a record. */
481
+ async delete(id, options = {}) {
482
+ await this.http.request({ method: "DELETE", path: this.path(id), signal: options.signal });
483
+ }
484
+ }
485
+ //# sourceMappingURL=data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/data.ts"],"names":[],"mappings":"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"}