@xata.io/client 0.0.0-alpha.vf2043e7 → 0.0.0-alpha.vf20a10c

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.
package/dist/index.mjs CHANGED
@@ -1,3 +1,26 @@
1
+ const defaultTrace = async (name, fn, _options) => {
2
+ return await fn({
3
+ name,
4
+ setAttributes: () => {
5
+ return;
6
+ }
7
+ });
8
+ };
9
+ const TraceAttributes = {
10
+ KIND: "xata.trace.kind",
11
+ VERSION: "xata.sdk.version",
12
+ TABLE: "xata.table",
13
+ HTTP_REQUEST_ID: "http.request_id",
14
+ HTTP_STATUS_CODE: "http.status_code",
15
+ HTTP_HOST: "http.host",
16
+ HTTP_SCHEME: "http.scheme",
17
+ HTTP_USER_AGENT: "http.user_agent",
18
+ HTTP_METHOD: "http.method",
19
+ HTTP_URL: "http.url",
20
+ HTTP_ROUTE: "http.route",
21
+ HTTP_TARGET: "http.target"
22
+ };
23
+
1
24
  function notEmpty(value) {
2
25
  return value !== null && value !== void 0;
3
26
  }
@@ -7,36 +30,153 @@ function compact(arr) {
7
30
  function isObject(value) {
8
31
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
9
32
  }
33
+ function isDefined(value) {
34
+ return value !== null && value !== void 0;
35
+ }
10
36
  function isString(value) {
11
- return value !== void 0 && value !== null && typeof value === "string";
37
+ return isDefined(value) && typeof value === "string";
38
+ }
39
+ function isStringArray(value) {
40
+ return isDefined(value) && Array.isArray(value) && value.every(isString);
41
+ }
42
+ function isNumber(value) {
43
+ return isDefined(value) && typeof value === "number";
44
+ }
45
+ function parseNumber(value) {
46
+ if (isNumber(value)) {
47
+ return value;
48
+ }
49
+ if (isString(value)) {
50
+ const parsed = Number(value);
51
+ if (!Number.isNaN(parsed)) {
52
+ return parsed;
53
+ }
54
+ }
55
+ return void 0;
56
+ }
57
+ function toBase64(value) {
58
+ try {
59
+ return btoa(value);
60
+ } catch (err) {
61
+ const buf = Buffer;
62
+ return buf.from(value).toString("base64");
63
+ }
64
+ }
65
+ function deepMerge(a, b) {
66
+ const result = { ...a };
67
+ for (const [key, value] of Object.entries(b)) {
68
+ if (isObject(value) && isObject(result[key])) {
69
+ result[key] = deepMerge(result[key], value);
70
+ } else {
71
+ result[key] = value;
72
+ }
73
+ }
74
+ return result;
75
+ }
76
+ function chunk(array, chunkSize) {
77
+ const result = [];
78
+ for (let i = 0; i < array.length; i += chunkSize) {
79
+ result.push(array.slice(i, i + chunkSize));
80
+ }
81
+ return result;
82
+ }
83
+ async function timeout(ms) {
84
+ return new Promise((resolve) => setTimeout(resolve, ms));
12
85
  }
13
86
 
14
- function getEnvVariable(name) {
87
+ function getEnvironment() {
15
88
  try {
16
- if (isObject(process) && isString(process?.env?.[name])) {
17
- return process.env[name];
89
+ if (isDefined(process) && isDefined(process.env)) {
90
+ return {
91
+ apiKey: process.env.XATA_API_KEY ?? getGlobalApiKey(),
92
+ databaseURL: process.env.XATA_DATABASE_URL ?? getGlobalDatabaseURL(),
93
+ branch: process.env.XATA_BRANCH ?? getGlobalBranch(),
94
+ envBranch: process.env.VERCEL_GIT_COMMIT_REF ?? process.env.CF_PAGES_BRANCH ?? process.env.BRANCH,
95
+ fallbackBranch: process.env.XATA_FALLBACK_BRANCH ?? getGlobalFallbackBranch()
96
+ };
18
97
  }
19
98
  } catch (err) {
20
99
  }
21
100
  try {
22
- if (isObject(Deno) && isString(Deno?.env?.get(name))) {
23
- return Deno.env.get(name);
101
+ if (isObject(Deno) && isObject(Deno.env)) {
102
+ return {
103
+ apiKey: Deno.env.get("XATA_API_KEY") ?? getGlobalApiKey(),
104
+ databaseURL: Deno.env.get("XATA_DATABASE_URL") ?? getGlobalDatabaseURL(),
105
+ branch: Deno.env.get("XATA_BRANCH") ?? getGlobalBranch(),
106
+ envBranch: Deno.env.get("VERCEL_GIT_COMMIT_REF") ?? Deno.env.get("CF_PAGES_BRANCH") ?? Deno.env.get("BRANCH"),
107
+ fallbackBranch: Deno.env.get("XATA_FALLBACK_BRANCH") ?? getGlobalFallbackBranch()
108
+ };
24
109
  }
25
110
  } catch (err) {
26
111
  }
112
+ return {
113
+ apiKey: getGlobalApiKey(),
114
+ databaseURL: getGlobalDatabaseURL(),
115
+ branch: getGlobalBranch(),
116
+ envBranch: void 0,
117
+ fallbackBranch: getGlobalFallbackBranch()
118
+ };
119
+ }
120
+ function getEnableBrowserVariable() {
121
+ try {
122
+ if (isObject(process) && isObject(process.env) && process.env.XATA_ENABLE_BROWSER !== void 0) {
123
+ return process.env.XATA_ENABLE_BROWSER === "true";
124
+ }
125
+ } catch (err) {
126
+ }
127
+ try {
128
+ if (isObject(Deno) && isObject(Deno.env) && Deno.env.get("XATA_ENABLE_BROWSER") !== void 0) {
129
+ return Deno.env.get("XATA_ENABLE_BROWSER") === "true";
130
+ }
131
+ } catch (err) {
132
+ }
133
+ try {
134
+ return XATA_ENABLE_BROWSER === true || XATA_ENABLE_BROWSER === "true";
135
+ } catch (err) {
136
+ return void 0;
137
+ }
138
+ }
139
+ function getGlobalApiKey() {
140
+ try {
141
+ return XATA_API_KEY;
142
+ } catch (err) {
143
+ return void 0;
144
+ }
145
+ }
146
+ function getGlobalDatabaseURL() {
147
+ try {
148
+ return XATA_DATABASE_URL;
149
+ } catch (err) {
150
+ return void 0;
151
+ }
152
+ }
153
+ function getGlobalBranch() {
154
+ try {
155
+ return XATA_BRANCH;
156
+ } catch (err) {
157
+ return void 0;
158
+ }
159
+ }
160
+ function getGlobalFallbackBranch() {
161
+ try {
162
+ return XATA_FALLBACK_BRANCH;
163
+ } catch (err) {
164
+ return void 0;
165
+ }
27
166
  }
28
167
  async function getGitBranch() {
168
+ const cmd = ["git", "branch", "--show-current"];
169
+ const fullCmd = cmd.join(" ");
170
+ const nodeModule = ["child", "process"].join("_");
171
+ const execOptions = { encoding: "utf-8", stdio: ["ignore", "pipe", "ignore"] };
29
172
  try {
30
- return require("child_process").execSync("git branch --show-current", { encoding: "utf-8" }).trim();
173
+ const { execSync } = await import(nodeModule);
174
+ return execSync(fullCmd, execOptions).toString().trim();
31
175
  } catch (err) {
32
176
  }
33
177
  try {
34
178
  if (isObject(Deno)) {
35
- const process2 = Deno.run({
36
- cmd: ["git", "branch", "--show-current"],
37
- stdout: "piped",
38
- stderr: "piped"
39
- });
179
+ const process2 = Deno.run({ cmd, stdout: "piped", stderr: "null" });
40
180
  return new TextDecoder().decode(await process2.output()).trim();
41
181
  }
42
182
  } catch (err) {
@@ -45,31 +185,142 @@ async function getGitBranch() {
45
185
 
46
186
  function getAPIKey() {
47
187
  try {
48
- return getEnvVariable("XATA_API_KEY") ?? XATA_API_KEY;
188
+ const { apiKey } = getEnvironment();
189
+ return apiKey;
49
190
  } catch (err) {
50
191
  return void 0;
51
192
  }
52
193
  }
53
194
 
195
+ var __accessCheck$8 = (obj, member, msg) => {
196
+ if (!member.has(obj))
197
+ throw TypeError("Cannot " + msg);
198
+ };
199
+ var __privateGet$8 = (obj, member, getter) => {
200
+ __accessCheck$8(obj, member, "read from private field");
201
+ return getter ? getter.call(obj) : member.get(obj);
202
+ };
203
+ var __privateAdd$8 = (obj, member, value) => {
204
+ if (member.has(obj))
205
+ throw TypeError("Cannot add the same private member more than once");
206
+ member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
207
+ };
208
+ var __privateSet$8 = (obj, member, value, setter) => {
209
+ __accessCheck$8(obj, member, "write to private field");
210
+ setter ? setter.call(obj, value) : member.set(obj, value);
211
+ return value;
212
+ };
213
+ var __privateMethod$4 = (obj, member, method) => {
214
+ __accessCheck$8(obj, member, "access private method");
215
+ return method;
216
+ };
217
+ var _fetch, _queue, _concurrency, _enqueue, enqueue_fn;
54
218
  function getFetchImplementation(userFetch) {
55
219
  const globalFetch = typeof fetch !== "undefined" ? fetch : void 0;
56
220
  const fetchImpl = userFetch ?? globalFetch;
57
221
  if (!fetchImpl) {
58
- throw new Error(`The \`fetch\` option passed to the Xata client is resolving to a falsy value and may not be correctly imported.`);
222
+ throw new Error(
223
+ `Couldn't find \`fetch\`. Install a fetch implementation such as \`node-fetch\` and pass it explicitly.`
224
+ );
59
225
  }
60
226
  return fetchImpl;
61
227
  }
228
+ class ApiRequestPool {
229
+ constructor(concurrency = 10) {
230
+ __privateAdd$8(this, _enqueue);
231
+ __privateAdd$8(this, _fetch, void 0);
232
+ __privateAdd$8(this, _queue, void 0);
233
+ __privateAdd$8(this, _concurrency, void 0);
234
+ __privateSet$8(this, _queue, []);
235
+ __privateSet$8(this, _concurrency, concurrency);
236
+ this.running = 0;
237
+ this.started = 0;
238
+ }
239
+ setFetch(fetch2) {
240
+ __privateSet$8(this, _fetch, fetch2);
241
+ }
242
+ getFetch() {
243
+ if (!__privateGet$8(this, _fetch)) {
244
+ throw new Error("Fetch not set");
245
+ }
246
+ return __privateGet$8(this, _fetch);
247
+ }
248
+ request(url, options) {
249
+ const start = new Date();
250
+ const fetch2 = this.getFetch();
251
+ const runRequest = async (stalled = false) => {
252
+ const response = await fetch2(url, options);
253
+ if (response.status === 429) {
254
+ const rateLimitReset = parseNumber(response.headers?.get("x-ratelimit-reset")) ?? 1;
255
+ await timeout(rateLimitReset * 1e3);
256
+ return await runRequest(true);
257
+ }
258
+ if (stalled) {
259
+ const stalledTime = new Date().getTime() - start.getTime();
260
+ console.warn(`A request to Xata hit your workspace limits, was retried and stalled for ${stalledTime}ms`);
261
+ }
262
+ return response;
263
+ };
264
+ return __privateMethod$4(this, _enqueue, enqueue_fn).call(this, async () => {
265
+ return await runRequest();
266
+ });
267
+ }
268
+ }
269
+ _fetch = new WeakMap();
270
+ _queue = new WeakMap();
271
+ _concurrency = new WeakMap();
272
+ _enqueue = new WeakSet();
273
+ enqueue_fn = function(task) {
274
+ const promise = new Promise((resolve) => __privateGet$8(this, _queue).push(resolve)).finally(() => {
275
+ this.started--;
276
+ this.running++;
277
+ }).then(() => task()).finally(() => {
278
+ this.running--;
279
+ const next = __privateGet$8(this, _queue).shift();
280
+ if (next !== void 0) {
281
+ this.started++;
282
+ next();
283
+ }
284
+ });
285
+ if (this.running + this.started < __privateGet$8(this, _concurrency)) {
286
+ const next = __privateGet$8(this, _queue).shift();
287
+ if (next !== void 0) {
288
+ this.started++;
289
+ next();
290
+ }
291
+ }
292
+ return promise;
293
+ };
62
294
 
63
- class FetcherError extends Error {
64
- constructor(status, data) {
295
+ function generateUUID() {
296
+ return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
297
+ const r = Math.random() * 16 | 0, v = c == "x" ? r : r & 3 | 8;
298
+ return v.toString(16);
299
+ });
300
+ }
301
+
302
+ const VERSION = "0.21.6";
303
+
304
+ class ErrorWithCause extends Error {
305
+ constructor(message, options) {
306
+ super(message, options);
307
+ }
308
+ }
309
+ class FetcherError extends ErrorWithCause {
310
+ constructor(status, data, requestId) {
65
311
  super(getMessage(data));
66
312
  this.status = status;
67
- this.errors = isBulkError(data) ? data.errors : void 0;
313
+ this.errors = isBulkError(data) ? data.errors : [{ message: getMessage(data), status }];
314
+ this.requestId = requestId;
68
315
  if (data instanceof Error) {
69
316
  this.stack = data.stack;
70
317
  this.cause = data.cause;
71
318
  }
72
319
  }
320
+ toString() {
321
+ const error = super.toString();
322
+ return `[${this.status}] (${this.requestId ?? "Unknown"}): ${error}`;
323
+ }
73
324
  }
74
325
  function isBulkError(error) {
75
326
  return isObject(error) && Array.isArray(error.errors);
@@ -91,285 +342,275 @@ function getMessage(data) {
91
342
  }
92
343
  }
93
344
 
345
+ const pool = new ApiRequestPool();
94
346
  const resolveUrl = (url, queryParams = {}, pathParams = {}) => {
95
- const query = new URLSearchParams(queryParams).toString();
347
+ const cleanQueryParams = Object.entries(queryParams).reduce((acc, [key, value]) => {
348
+ if (value === void 0 || value === null)
349
+ return acc;
350
+ return { ...acc, [key]: value };
351
+ }, {});
352
+ const query = new URLSearchParams(cleanQueryParams).toString();
96
353
  const queryString = query.length > 0 ? `?${query}` : "";
97
- return url.replace(/\{\w*\}/g, (key) => pathParams[key.slice(1, -1)]) + queryString;
354
+ const cleanPathParams = Object.entries(pathParams).reduce((acc, [key, value]) => {
355
+ return { ...acc, [key]: encodeURIComponent(String(value ?? "")).replace("%3A", ":") };
356
+ }, {});
357
+ return url.replace(/\{\w*\}/g, (key) => cleanPathParams[key.slice(1, -1)]) + queryString;
98
358
  };
99
359
  function buildBaseUrl({
360
+ endpoint,
100
361
  path,
101
362
  workspacesApiUrl,
102
363
  apiUrl,
103
- pathParams
364
+ pathParams = {}
104
365
  }) {
105
- if (!pathParams?.workspace)
106
- return `${apiUrl}${path}`;
107
- const url = typeof workspacesApiUrl === "string" ? `${workspacesApiUrl}${path}` : workspacesApiUrl(path, pathParams);
108
- return url.replace("{workspaceId}", pathParams.workspace);
366
+ if (endpoint === "dataPlane") {
367
+ const url = isString(workspacesApiUrl) ? `${workspacesApiUrl}${path}` : workspacesApiUrl(path, pathParams);
368
+ const urlWithWorkspace = isString(pathParams.workspace) ? url.replace("{workspaceId}", String(pathParams.workspace)) : url;
369
+ return isString(pathParams.region) ? urlWithWorkspace.replace("{region}", String(pathParams.region)) : urlWithWorkspace;
370
+ }
371
+ return `${apiUrl}${path}`;
109
372
  }
110
373
  function hostHeader(url) {
111
374
  const pattern = /.*:\/\/(?<host>[^/]+).*/;
112
375
  const { groups } = pattern.exec(url) ?? {};
113
376
  return groups?.host ? { Host: groups.host } : {};
114
377
  }
378
+ const defaultClientID = generateUUID();
115
379
  async function fetch$1({
116
380
  url: path,
117
381
  method,
118
382
  body,
119
- headers,
383
+ headers: customHeaders,
120
384
  pathParams,
121
385
  queryParams,
122
386
  fetchImpl,
123
387
  apiKey,
388
+ endpoint,
124
389
  apiUrl,
125
- workspacesApiUrl
390
+ workspacesApiUrl,
391
+ trace,
392
+ signal,
393
+ clientID,
394
+ sessionID,
395
+ clientName,
396
+ fetchOptions = {}
126
397
  }) {
127
- const baseUrl = buildBaseUrl({ path, workspacesApiUrl, pathParams, apiUrl });
128
- const fullUrl = resolveUrl(baseUrl, queryParams, pathParams);
129
- const url = fullUrl.includes("localhost") ? fullUrl.replace(/^[^.]+\./, "http://") : fullUrl;
130
- const response = await fetchImpl(url, {
131
- method: method.toUpperCase(),
132
- body: body ? JSON.stringify(body) : void 0,
133
- headers: {
134
- "Content-Type": "application/json",
135
- ...headers,
136
- ...hostHeader(fullUrl),
137
- Authorization: `Bearer ${apiKey}`
138
- }
139
- });
140
- if (response.status === 204) {
141
- return {};
142
- }
398
+ pool.setFetch(fetchImpl);
399
+ return await trace(
400
+ `${method.toUpperCase()} ${path}`,
401
+ async ({ setAttributes }) => {
402
+ const baseUrl = buildBaseUrl({ endpoint, path, workspacesApiUrl, pathParams, apiUrl });
403
+ const fullUrl = resolveUrl(baseUrl, queryParams, pathParams);
404
+ const url = fullUrl.includes("localhost") ? fullUrl.replace(/^[^.]+\./, "http://") : fullUrl;
405
+ setAttributes({
406
+ [TraceAttributes.HTTP_URL]: url,
407
+ [TraceAttributes.HTTP_TARGET]: resolveUrl(path, queryParams, pathParams)
408
+ });
409
+ const xataAgent = compact([
410
+ ["client", "TS_SDK"],
411
+ ["version", VERSION],
412
+ isDefined(clientName) ? ["service", clientName] : void 0
413
+ ]).map(([key, value]) => `${key}=${value}`).join("; ");
414
+ const headers = {
415
+ "Accept-Encoding": "identity",
416
+ "Content-Type": "application/json",
417
+ "X-Xata-Client-ID": clientID ?? defaultClientID,
418
+ "X-Xata-Session-ID": sessionID ?? generateUUID(),
419
+ "X-Xata-Agent": xataAgent,
420
+ ...customHeaders,
421
+ ...hostHeader(fullUrl),
422
+ Authorization: `Bearer ${apiKey}`
423
+ };
424
+ const response = await pool.request(url, {
425
+ ...fetchOptions,
426
+ method: method.toUpperCase(),
427
+ body: body ? JSON.stringify(body) : void 0,
428
+ headers,
429
+ signal
430
+ });
431
+ const { host, protocol } = parseUrl(response.url);
432
+ const requestId = response.headers?.get("x-request-id") ?? void 0;
433
+ setAttributes({
434
+ [TraceAttributes.KIND]: "http",
435
+ [TraceAttributes.HTTP_REQUEST_ID]: requestId,
436
+ [TraceAttributes.HTTP_STATUS_CODE]: response.status,
437
+ [TraceAttributes.HTTP_HOST]: host,
438
+ [TraceAttributes.HTTP_SCHEME]: protocol?.replace(":", "")
439
+ });
440
+ if (response.status === 204) {
441
+ return {};
442
+ }
443
+ if (response.status === 429) {
444
+ throw new FetcherError(response.status, "Rate limit exceeded", requestId);
445
+ }
446
+ try {
447
+ const jsonResponse = await response.json();
448
+ if (response.ok) {
449
+ return jsonResponse;
450
+ }
451
+ throw new FetcherError(response.status, jsonResponse, requestId);
452
+ } catch (error) {
453
+ throw new FetcherError(response.status, error, requestId);
454
+ }
455
+ },
456
+ { [TraceAttributes.HTTP_METHOD]: method.toUpperCase(), [TraceAttributes.HTTP_ROUTE]: path }
457
+ );
458
+ }
459
+ function parseUrl(url) {
143
460
  try {
144
- const jsonResponse = await response.json();
145
- if (response.ok) {
146
- return jsonResponse;
147
- }
148
- throw new FetcherError(response.status, jsonResponse);
461
+ const { host, protocol } = new URL(url);
462
+ return { host, protocol };
149
463
  } catch (error) {
150
- throw new FetcherError(response.status, error);
464
+ return {};
151
465
  }
152
466
  }
153
467
 
154
- const getUser = (variables) => fetch$1({ url: "/user", method: "get", ...variables });
155
- const updateUser = (variables) => fetch$1({ url: "/user", method: "put", ...variables });
156
- const deleteUser = (variables) => fetch$1({ url: "/user", method: "delete", ...variables });
157
- const getUserAPIKeys = (variables) => fetch$1({
158
- url: "/user/keys",
159
- method: "get",
160
- ...variables
161
- });
162
- const createUserAPIKey = (variables) => fetch$1({
163
- url: "/user/keys/{keyName}",
164
- method: "post",
165
- ...variables
166
- });
167
- const deleteUserAPIKey = (variables) => fetch$1({
168
- url: "/user/keys/{keyName}",
169
- method: "delete",
170
- ...variables
171
- });
172
- const createWorkspace = (variables) => fetch$1({
173
- url: "/workspaces",
174
- method: "post",
175
- ...variables
176
- });
177
- const getWorkspacesList = (variables) => fetch$1({
178
- url: "/workspaces",
179
- method: "get",
180
- ...variables
181
- });
182
- const getWorkspace = (variables) => fetch$1({
183
- url: "/workspaces/{workspaceId}",
184
- method: "get",
185
- ...variables
186
- });
187
- const updateWorkspace = (variables) => fetch$1({
188
- url: "/workspaces/{workspaceId}",
189
- method: "put",
190
- ...variables
191
- });
192
- const deleteWorkspace = (variables) => fetch$1({
193
- url: "/workspaces/{workspaceId}",
194
- method: "delete",
195
- ...variables
196
- });
197
- const getWorkspaceMembersList = (variables) => fetch$1({
198
- url: "/workspaces/{workspaceId}/members",
199
- method: "get",
200
- ...variables
201
- });
202
- const updateWorkspaceMemberRole = (variables) => fetch$1({ url: "/workspaces/{workspaceId}/members/{userId}", method: "put", ...variables });
203
- const removeWorkspaceMember = (variables) => fetch$1({
204
- url: "/workspaces/{workspaceId}/members/{userId}",
205
- method: "delete",
206
- ...variables
207
- });
208
- const inviteWorkspaceMember = (variables) => fetch$1({ url: "/workspaces/{workspaceId}/invites", method: "post", ...variables });
209
- const cancelWorkspaceMemberInvite = (variables) => fetch$1({
210
- url: "/workspaces/{workspaceId}/invites/{inviteId}",
211
- method: "delete",
212
- ...variables
213
- });
214
- const resendWorkspaceMemberInvite = (variables) => fetch$1({
215
- url: "/workspaces/{workspaceId}/invites/{inviteId}/resend",
216
- method: "post",
217
- ...variables
218
- });
219
- const acceptWorkspaceMemberInvite = (variables) => fetch$1({
220
- url: "/workspaces/{workspaceId}/invites/{inviteKey}/accept",
221
- method: "post",
222
- ...variables
223
- });
224
- const getDatabaseList = (variables) => fetch$1({
225
- url: "/dbs",
226
- method: "get",
227
- ...variables
228
- });
229
- const getBranchList = (variables) => fetch$1({
468
+ const dataPlaneFetch = async (options) => fetch$1({ ...options, endpoint: "dataPlane" });
469
+
470
+ const getBranchList = (variables, signal) => dataPlaneFetch({
230
471
  url: "/dbs/{dbName}",
231
472
  method: "get",
232
- ...variables
233
- });
234
- const createDatabase = (variables) => fetch$1({
235
- url: "/dbs/{dbName}",
236
- method: "put",
237
- ...variables
238
- });
239
- const deleteDatabase = (variables) => fetch$1({
240
- url: "/dbs/{dbName}",
241
- method: "delete",
242
- ...variables
473
+ ...variables,
474
+ signal
243
475
  });
244
- const getBranchDetails = (variables) => fetch$1({
476
+ const getBranchDetails = (variables, signal) => dataPlaneFetch({
245
477
  url: "/db/{dbBranchName}",
246
478
  method: "get",
247
- ...variables
479
+ ...variables,
480
+ signal
248
481
  });
249
- const createBranch = (variables) => fetch$1({
250
- url: "/db/{dbBranchName}",
251
- method: "put",
252
- ...variables
253
- });
254
- const deleteBranch = (variables) => fetch$1({
482
+ const createBranch = (variables, signal) => dataPlaneFetch({ url: "/db/{dbBranchName}", method: "put", ...variables, signal });
483
+ const deleteBranch = (variables, signal) => dataPlaneFetch({
255
484
  url: "/db/{dbBranchName}",
256
485
  method: "delete",
257
- ...variables
486
+ ...variables,
487
+ signal
258
488
  });
259
- const updateBranchMetadata = (variables) => fetch$1({
489
+ const updateBranchMetadata = (variables, signal) => dataPlaneFetch({
260
490
  url: "/db/{dbBranchName}/metadata",
261
491
  method: "put",
262
- ...variables
492
+ ...variables,
493
+ signal
263
494
  });
264
- const getBranchMetadata = (variables) => fetch$1({
495
+ const getBranchMetadata = (variables, signal) => dataPlaneFetch({
265
496
  url: "/db/{dbBranchName}/metadata",
266
497
  method: "get",
267
- ...variables
498
+ ...variables,
499
+ signal
268
500
  });
269
- const getBranchMigrationHistory = (variables) => fetch$1({ url: "/db/{dbBranchName}/migrations", method: "get", ...variables });
270
- const executeBranchMigrationPlan = (variables) => fetch$1({ url: "/db/{dbBranchName}/migrations/execute", method: "post", ...variables });
271
- const getBranchMigrationPlan = (variables) => fetch$1({ url: "/db/{dbBranchName}/migrations/plan", method: "post", ...variables });
272
- const getBranchStats = (variables) => fetch$1({
501
+ const getBranchStats = (variables, signal) => dataPlaneFetch({
273
502
  url: "/db/{dbBranchName}/stats",
274
503
  method: "get",
275
- ...variables
504
+ ...variables,
505
+ signal
506
+ });
507
+ const getGitBranchesMapping = (variables, signal) => dataPlaneFetch({ url: "/dbs/{dbName}/gitBranches", method: "get", ...variables, signal });
508
+ const addGitBranchesEntry = (variables, signal) => dataPlaneFetch({ url: "/dbs/{dbName}/gitBranches", method: "post", ...variables, signal });
509
+ const removeGitBranchesEntry = (variables, signal) => dataPlaneFetch({ url: "/dbs/{dbName}/gitBranches", method: "delete", ...variables, signal });
510
+ const resolveBranch = (variables, signal) => dataPlaneFetch({ url: "/dbs/{dbName}/resolveBranch", method: "get", ...variables, signal });
511
+ const getBranchMigrationHistory = (variables, signal) => dataPlaneFetch({ url: "/db/{dbBranchName}/migrations", method: "get", ...variables, signal });
512
+ const getBranchMigrationPlan = (variables, signal) => dataPlaneFetch({ url: "/db/{dbBranchName}/migrations/plan", method: "post", ...variables, signal });
513
+ const executeBranchMigrationPlan = (variables, signal) => dataPlaneFetch({ url: "/db/{dbBranchName}/migrations/execute", method: "post", ...variables, signal });
514
+ const queryMigrationRequests = (variables, signal) => dataPlaneFetch({ url: "/dbs/{dbName}/migrations/query", method: "post", ...variables, signal });
515
+ const createMigrationRequest = (variables, signal) => dataPlaneFetch({ url: "/dbs/{dbName}/migrations", method: "post", ...variables, signal });
516
+ const getMigrationRequest = (variables, signal) => dataPlaneFetch({
517
+ url: "/dbs/{dbName}/migrations/{mrNumber}",
518
+ method: "get",
519
+ ...variables,
520
+ signal
276
521
  });
277
- const createTable = (variables) => fetch$1({
522
+ const updateMigrationRequest = (variables, signal) => dataPlaneFetch({ url: "/dbs/{dbName}/migrations/{mrNumber}", method: "patch", ...variables, signal });
523
+ const listMigrationRequestsCommits = (variables, signal) => dataPlaneFetch({ url: "/dbs/{dbName}/migrations/{mrNumber}/commits", method: "post", ...variables, signal });
524
+ const compareMigrationRequest = (variables, signal) => dataPlaneFetch({ url: "/dbs/{dbName}/migrations/{mrNumber}/compare", method: "post", ...variables, signal });
525
+ const getMigrationRequestIsMerged = (variables, signal) => dataPlaneFetch({ url: "/dbs/{dbName}/migrations/{mrNumber}/merge", method: "get", ...variables, signal });
526
+ const mergeMigrationRequest = (variables, signal) => dataPlaneFetch({
527
+ url: "/dbs/{dbName}/migrations/{mrNumber}/merge",
528
+ method: "post",
529
+ ...variables,
530
+ signal
531
+ });
532
+ const getBranchSchemaHistory = (variables, signal) => dataPlaneFetch({ url: "/db/{dbBranchName}/schema/history", method: "post", ...variables, signal });
533
+ const compareBranchWithUserSchema = (variables, signal) => dataPlaneFetch({ url: "/db/{dbBranchName}/schema/compare", method: "post", ...variables, signal });
534
+ const compareBranchSchemas = (variables, signal) => dataPlaneFetch({ url: "/db/{dbBranchName}/schema/compare/{branchName}", method: "post", ...variables, signal });
535
+ const updateBranchSchema = (variables, signal) => dataPlaneFetch({ url: "/db/{dbBranchName}/schema/update", method: "post", ...variables, signal });
536
+ const previewBranchSchemaEdit = (variables, signal) => dataPlaneFetch({ url: "/db/{dbBranchName}/schema/preview", method: "post", ...variables, signal });
537
+ const applyBranchSchemaEdit = (variables, signal) => dataPlaneFetch({ url: "/db/{dbBranchName}/schema/apply", method: "post", ...variables, signal });
538
+ const createTable = (variables, signal) => dataPlaneFetch({
278
539
  url: "/db/{dbBranchName}/tables/{tableName}",
279
540
  method: "put",
280
- ...variables
541
+ ...variables,
542
+ signal
281
543
  });
282
- const deleteTable = (variables) => fetch$1({
544
+ const deleteTable = (variables, signal) => dataPlaneFetch({
283
545
  url: "/db/{dbBranchName}/tables/{tableName}",
284
546
  method: "delete",
285
- ...variables
286
- });
287
- const updateTable = (variables) => fetch$1({
288
- url: "/db/{dbBranchName}/tables/{tableName}",
289
- method: "patch",
290
- ...variables
547
+ ...variables,
548
+ signal
291
549
  });
292
- const getTableSchema = (variables) => fetch$1({
550
+ const updateTable = (variables, signal) => dataPlaneFetch({ url: "/db/{dbBranchName}/tables/{tableName}", method: "patch", ...variables, signal });
551
+ const getTableSchema = (variables, signal) => dataPlaneFetch({
293
552
  url: "/db/{dbBranchName}/tables/{tableName}/schema",
294
553
  method: "get",
295
- ...variables
554
+ ...variables,
555
+ signal
296
556
  });
297
- const setTableSchema = (variables) => fetch$1({
298
- url: "/db/{dbBranchName}/tables/{tableName}/schema",
299
- method: "put",
300
- ...variables
301
- });
302
- const getTableColumns = (variables) => fetch$1({
557
+ const setTableSchema = (variables, signal) => dataPlaneFetch({ url: "/db/{dbBranchName}/tables/{tableName}/schema", method: "put", ...variables, signal });
558
+ const getTableColumns = (variables, signal) => dataPlaneFetch({
303
559
  url: "/db/{dbBranchName}/tables/{tableName}/columns",
304
560
  method: "get",
305
- ...variables
306
- });
307
- const addTableColumn = (variables) => fetch$1({
308
- url: "/db/{dbBranchName}/tables/{tableName}/columns",
309
- method: "post",
310
- ...variables
561
+ ...variables,
562
+ signal
311
563
  });
312
- const getColumn = (variables) => fetch$1({
564
+ const addTableColumn = (variables, signal) => dataPlaneFetch(
565
+ { url: "/db/{dbBranchName}/tables/{tableName}/columns", method: "post", ...variables, signal }
566
+ );
567
+ const getColumn = (variables, signal) => dataPlaneFetch({
313
568
  url: "/db/{dbBranchName}/tables/{tableName}/columns/{columnName}",
314
569
  method: "get",
315
- ...variables
316
- });
317
- const deleteColumn = (variables) => fetch$1({
318
- url: "/db/{dbBranchName}/tables/{tableName}/columns/{columnName}",
319
- method: "delete",
320
- ...variables
570
+ ...variables,
571
+ signal
321
572
  });
322
- const updateColumn = (variables) => fetch$1({
573
+ const updateColumn = (variables, signal) => dataPlaneFetch({ url: "/db/{dbBranchName}/tables/{tableName}/columns/{columnName}", method: "patch", ...variables, signal });
574
+ const deleteColumn = (variables, signal) => dataPlaneFetch({
323
575
  url: "/db/{dbBranchName}/tables/{tableName}/columns/{columnName}",
324
- method: "patch",
325
- ...variables
326
- });
327
- const insertRecord = (variables) => fetch$1({
328
- url: "/db/{dbBranchName}/tables/{tableName}/data",
329
- method: "post",
330
- ...variables
331
- });
332
- const insertRecordWithID = (variables) => fetch$1({ url: "/db/{dbBranchName}/tables/{tableName}/data/{recordId}", method: "put", ...variables });
333
- const updateRecordWithID = (variables) => fetch$1({ url: "/db/{dbBranchName}/tables/{tableName}/data/{recordId}", method: "patch", ...variables });
334
- const upsertRecordWithID = (variables) => fetch$1({ url: "/db/{dbBranchName}/tables/{tableName}/data/{recordId}", method: "post", ...variables });
335
- const deleteRecord = (variables) => fetch$1({
336
- url: "/db/{dbBranchName}/tables/{tableName}/data/{recordId}",
337
576
  method: "delete",
338
- ...variables
577
+ ...variables,
578
+ signal
339
579
  });
340
- const getRecord = (variables) => fetch$1({
580
+ const branchTransaction = (variables, signal) => dataPlaneFetch({ url: "/db/{dbBranchName}/transaction", method: "post", ...variables, signal });
581
+ const insertRecord = (variables, signal) => dataPlaneFetch({ url: "/db/{dbBranchName}/tables/{tableName}/data", method: "post", ...variables, signal });
582
+ const getRecord = (variables, signal) => dataPlaneFetch({
341
583
  url: "/db/{dbBranchName}/tables/{tableName}/data/{recordId}",
342
584
  method: "get",
343
- ...variables
585
+ ...variables,
586
+ signal
344
587
  });
345
- const bulkInsertTableRecords = (variables) => fetch$1({ url: "/db/{dbBranchName}/tables/{tableName}/bulk", method: "post", ...variables });
346
- const queryTable = (variables) => fetch$1({
588
+ const insertRecordWithID = (variables, signal) => dataPlaneFetch({ url: "/db/{dbBranchName}/tables/{tableName}/data/{recordId}", method: "put", ...variables, signal });
589
+ const updateRecordWithID = (variables, signal) => dataPlaneFetch({ url: "/db/{dbBranchName}/tables/{tableName}/data/{recordId}", method: "patch", ...variables, signal });
590
+ const upsertRecordWithID = (variables, signal) => dataPlaneFetch({ url: "/db/{dbBranchName}/tables/{tableName}/data/{recordId}", method: "post", ...variables, signal });
591
+ const deleteRecord = (variables, signal) => dataPlaneFetch({ url: "/db/{dbBranchName}/tables/{tableName}/data/{recordId}", method: "delete", ...variables, signal });
592
+ const bulkInsertTableRecords = (variables, signal) => dataPlaneFetch({ url: "/db/{dbBranchName}/tables/{tableName}/bulk", method: "post", ...variables, signal });
593
+ const queryTable = (variables, signal) => dataPlaneFetch({
347
594
  url: "/db/{dbBranchName}/tables/{tableName}/query",
348
595
  method: "post",
349
- ...variables
596
+ ...variables,
597
+ signal
350
598
  });
351
- const searchBranch = (variables) => fetch$1({
599
+ const searchBranch = (variables, signal) => dataPlaneFetch({
352
600
  url: "/db/{dbBranchName}/search",
353
601
  method: "post",
354
- ...variables
602
+ ...variables,
603
+ signal
355
604
  });
356
- const operationsByTag = {
357
- users: { getUser, updateUser, deleteUser, getUserAPIKeys, createUserAPIKey, deleteUserAPIKey },
358
- workspaces: {
359
- createWorkspace,
360
- getWorkspacesList,
361
- getWorkspace,
362
- updateWorkspace,
363
- deleteWorkspace,
364
- getWorkspaceMembersList,
365
- updateWorkspaceMemberRole,
366
- removeWorkspaceMember,
367
- inviteWorkspaceMember,
368
- cancelWorkspaceMemberInvite,
369
- resendWorkspaceMemberInvite,
370
- acceptWorkspaceMemberInvite
371
- },
372
- database: { getDatabaseList, createDatabase, deleteDatabase },
605
+ const searchTable = (variables, signal) => dataPlaneFetch({
606
+ url: "/db/{dbBranchName}/tables/{tableName}/search",
607
+ method: "post",
608
+ ...variables,
609
+ signal
610
+ });
611
+ const summarizeTable = (variables, signal) => dataPlaneFetch({ url: "/db/{dbBranchName}/tables/{tableName}/summarize", method: "post", ...variables, signal });
612
+ const aggregateTable = (variables, signal) => dataPlaneFetch({ url: "/db/{dbBranchName}/tables/{tableName}/aggregate", method: "post", ...variables, signal });
613
+ const operationsByTag$2 = {
373
614
  branch: {
374
615
  getBranchList,
375
616
  getBranchDetails,
@@ -377,10 +618,32 @@ const operationsByTag = {
377
618
  deleteBranch,
378
619
  updateBranchMetadata,
379
620
  getBranchMetadata,
621
+ getBranchStats,
622
+ getGitBranchesMapping,
623
+ addGitBranchesEntry,
624
+ removeGitBranchesEntry,
625
+ resolveBranch
626
+ },
627
+ migrations: {
380
628
  getBranchMigrationHistory,
381
- executeBranchMigrationPlan,
382
629
  getBranchMigrationPlan,
383
- getBranchStats
630
+ executeBranchMigrationPlan,
631
+ getBranchSchemaHistory,
632
+ compareBranchWithUserSchema,
633
+ compareBranchSchemas,
634
+ updateBranchSchema,
635
+ previewBranchSchemaEdit,
636
+ applyBranchSchemaEdit
637
+ },
638
+ migrationRequests: {
639
+ queryMigrationRequests,
640
+ createMigrationRequest,
641
+ getMigrationRequest,
642
+ updateMigrationRequest,
643
+ listMigrationRequestsCommits,
644
+ compareMigrationRequest,
645
+ getMigrationRequestIsMerged,
646
+ mergeMigrationRequest
384
647
  },
385
648
  table: {
386
649
  createTable,
@@ -391,26 +654,160 @@ const operationsByTag = {
391
654
  getTableColumns,
392
655
  addTableColumn,
393
656
  getColumn,
394
- deleteColumn,
395
- updateColumn
657
+ updateColumn,
658
+ deleteColumn
396
659
  },
397
660
  records: {
661
+ branchTransaction,
398
662
  insertRecord,
663
+ getRecord,
399
664
  insertRecordWithID,
400
665
  updateRecordWithID,
401
666
  upsertRecordWithID,
402
667
  deleteRecord,
403
- getRecord,
404
- bulkInsertTableRecords,
405
- queryTable,
406
- searchBranch
668
+ bulkInsertTableRecords
669
+ },
670
+ searchAndFilter: { queryTable, searchBranch, searchTable, summarizeTable, aggregateTable }
671
+ };
672
+
673
+ const controlPlaneFetch = async (options) => fetch$1({ ...options, endpoint: "controlPlane" });
674
+
675
+ const getUser = (variables, signal) => controlPlaneFetch({
676
+ url: "/user",
677
+ method: "get",
678
+ ...variables,
679
+ signal
680
+ });
681
+ const updateUser = (variables, signal) => controlPlaneFetch({
682
+ url: "/user",
683
+ method: "put",
684
+ ...variables,
685
+ signal
686
+ });
687
+ const deleteUser = (variables, signal) => controlPlaneFetch({
688
+ url: "/user",
689
+ method: "delete",
690
+ ...variables,
691
+ signal
692
+ });
693
+ const getUserAPIKeys = (variables, signal) => controlPlaneFetch({
694
+ url: "/user/keys",
695
+ method: "get",
696
+ ...variables,
697
+ signal
698
+ });
699
+ const createUserAPIKey = (variables, signal) => controlPlaneFetch({
700
+ url: "/user/keys/{keyName}",
701
+ method: "post",
702
+ ...variables,
703
+ signal
704
+ });
705
+ const deleteUserAPIKey = (variables, signal) => controlPlaneFetch({
706
+ url: "/user/keys/{keyName}",
707
+ method: "delete",
708
+ ...variables,
709
+ signal
710
+ });
711
+ const getWorkspacesList = (variables, signal) => controlPlaneFetch({
712
+ url: "/workspaces",
713
+ method: "get",
714
+ ...variables,
715
+ signal
716
+ });
717
+ const createWorkspace = (variables, signal) => controlPlaneFetch({
718
+ url: "/workspaces",
719
+ method: "post",
720
+ ...variables,
721
+ signal
722
+ });
723
+ const getWorkspace = (variables, signal) => controlPlaneFetch({
724
+ url: "/workspaces/{workspaceId}",
725
+ method: "get",
726
+ ...variables,
727
+ signal
728
+ });
729
+ const updateWorkspace = (variables, signal) => controlPlaneFetch({
730
+ url: "/workspaces/{workspaceId}",
731
+ method: "put",
732
+ ...variables,
733
+ signal
734
+ });
735
+ const deleteWorkspace = (variables, signal) => controlPlaneFetch({
736
+ url: "/workspaces/{workspaceId}",
737
+ method: "delete",
738
+ ...variables,
739
+ signal
740
+ });
741
+ const getWorkspaceMembersList = (variables, signal) => controlPlaneFetch({ url: "/workspaces/{workspaceId}/members", method: "get", ...variables, signal });
742
+ const updateWorkspaceMemberRole = (variables, signal) => controlPlaneFetch({ url: "/workspaces/{workspaceId}/members/{userId}", method: "put", ...variables, signal });
743
+ const removeWorkspaceMember = (variables, signal) => controlPlaneFetch({
744
+ url: "/workspaces/{workspaceId}/members/{userId}",
745
+ method: "delete",
746
+ ...variables,
747
+ signal
748
+ });
749
+ const inviteWorkspaceMember = (variables, signal) => controlPlaneFetch({ url: "/workspaces/{workspaceId}/invites", method: "post", ...variables, signal });
750
+ const updateWorkspaceMemberInvite = (variables, signal) => controlPlaneFetch({ url: "/workspaces/{workspaceId}/invites/{inviteId}", method: "patch", ...variables, signal });
751
+ const cancelWorkspaceMemberInvite = (variables, signal) => controlPlaneFetch({ url: "/workspaces/{workspaceId}/invites/{inviteId}", method: "delete", ...variables, signal });
752
+ const acceptWorkspaceMemberInvite = (variables, signal) => controlPlaneFetch({ url: "/workspaces/{workspaceId}/invites/{inviteKey}/accept", method: "post", ...variables, signal });
753
+ const resendWorkspaceMemberInvite = (variables, signal) => controlPlaneFetch({ url: "/workspaces/{workspaceId}/invites/{inviteId}/resend", method: "post", ...variables, signal });
754
+ const getDatabaseList = (variables, signal) => controlPlaneFetch({
755
+ url: "/workspaces/{workspaceId}/dbs",
756
+ method: "get",
757
+ ...variables,
758
+ signal
759
+ });
760
+ const createDatabase = (variables, signal) => controlPlaneFetch({ url: "/workspaces/{workspaceId}/dbs/{dbName}", method: "put", ...variables, signal });
761
+ const deleteDatabase = (variables, signal) => controlPlaneFetch({
762
+ url: "/workspaces/{workspaceId}/dbs/{dbName}",
763
+ method: "delete",
764
+ ...variables,
765
+ signal
766
+ });
767
+ const getDatabaseMetadata = (variables, signal) => controlPlaneFetch({ url: "/workspaces/{workspaceId}/dbs/{dbName}", method: "get", ...variables, signal });
768
+ const updateDatabaseMetadata = (variables, signal) => controlPlaneFetch({ url: "/workspaces/{workspaceId}/dbs/{dbName}", method: "patch", ...variables, signal });
769
+ const listRegions = (variables, signal) => controlPlaneFetch({
770
+ url: "/workspaces/{workspaceId}/regions",
771
+ method: "get",
772
+ ...variables,
773
+ signal
774
+ });
775
+ const operationsByTag$1 = {
776
+ users: { getUser, updateUser, deleteUser },
777
+ authentication: { getUserAPIKeys, createUserAPIKey, deleteUserAPIKey },
778
+ workspaces: {
779
+ getWorkspacesList,
780
+ createWorkspace,
781
+ getWorkspace,
782
+ updateWorkspace,
783
+ deleteWorkspace,
784
+ getWorkspaceMembersList,
785
+ updateWorkspaceMemberRole,
786
+ removeWorkspaceMember
787
+ },
788
+ invites: {
789
+ inviteWorkspaceMember,
790
+ updateWorkspaceMemberInvite,
791
+ cancelWorkspaceMemberInvite,
792
+ acceptWorkspaceMemberInvite,
793
+ resendWorkspaceMemberInvite
794
+ },
795
+ databases: {
796
+ getDatabaseList,
797
+ createDatabase,
798
+ deleteDatabase,
799
+ getDatabaseMetadata,
800
+ updateDatabaseMetadata,
801
+ listRegions
407
802
  }
408
803
  };
409
804
 
805
+ const operationsByTag = deepMerge(operationsByTag$2, operationsByTag$1);
806
+
410
807
  function getHostUrl(provider, type) {
411
- if (isValidAlias(provider)) {
808
+ if (isHostProviderAlias(provider)) {
412
809
  return providers[provider][type];
413
- } else if (isValidBuilder(provider)) {
810
+ } else if (isHostProviderBuilder(provider)) {
414
811
  return provider[type];
415
812
  }
416
813
  throw new Error("Invalid API provider");
@@ -418,84 +815,133 @@ function getHostUrl(provider, type) {
418
815
  const providers = {
419
816
  production: {
420
817
  main: "https://api.xata.io",
421
- workspaces: "https://{workspaceId}.xata.sh"
818
+ workspaces: "https://{workspaceId}.{region}.xata.sh"
422
819
  },
423
820
  staging: {
424
821
  main: "https://staging.xatabase.co",
425
- workspaces: "https://{workspaceId}.staging.xatabase.co"
822
+ workspaces: "https://{workspaceId}.staging.{region}.xatabase.co"
426
823
  }
427
824
  };
428
- function isValidAlias(alias) {
825
+ function isHostProviderAlias(alias) {
429
826
  return isString(alias) && Object.keys(providers).includes(alias);
430
827
  }
431
- function isValidBuilder(builder) {
828
+ function isHostProviderBuilder(builder) {
432
829
  return isObject(builder) && isString(builder.main) && isString(builder.workspaces);
433
830
  }
831
+ function parseProviderString(provider = "production") {
832
+ if (isHostProviderAlias(provider)) {
833
+ return provider;
834
+ }
835
+ const [main, workspaces] = provider.split(",");
836
+ if (!main || !workspaces)
837
+ return null;
838
+ return { main, workspaces };
839
+ }
840
+ function parseWorkspacesUrlParts(url) {
841
+ if (!isString(url))
842
+ return null;
843
+ const regex = /(?:https:\/\/)?([^.]+)(?:\.([^.]+))\.xata\.sh.*/;
844
+ const regexStaging = /(?:https:\/\/)?([^.]+)\.staging(?:\.([^.]+))\.xatabase\.co.*/;
845
+ const match = url.match(regex) || url.match(regexStaging);
846
+ if (!match)
847
+ return null;
848
+ return { workspace: match[1], region: match[2] };
849
+ }
434
850
 
435
- var __accessCheck$6 = (obj, member, msg) => {
851
+ var __accessCheck$7 = (obj, member, msg) => {
436
852
  if (!member.has(obj))
437
853
  throw TypeError("Cannot " + msg);
438
854
  };
439
- var __privateGet$5 = (obj, member, getter) => {
440
- __accessCheck$6(obj, member, "read from private field");
855
+ var __privateGet$7 = (obj, member, getter) => {
856
+ __accessCheck$7(obj, member, "read from private field");
441
857
  return getter ? getter.call(obj) : member.get(obj);
442
858
  };
443
- var __privateAdd$6 = (obj, member, value) => {
859
+ var __privateAdd$7 = (obj, member, value) => {
444
860
  if (member.has(obj))
445
861
  throw TypeError("Cannot add the same private member more than once");
446
862
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
447
863
  };
448
- var __privateSet$4 = (obj, member, value, setter) => {
449
- __accessCheck$6(obj, member, "write to private field");
864
+ var __privateSet$7 = (obj, member, value, setter) => {
865
+ __accessCheck$7(obj, member, "write to private field");
450
866
  setter ? setter.call(obj, value) : member.set(obj, value);
451
867
  return value;
452
868
  };
453
869
  var _extraProps, _namespaces;
454
870
  class XataApiClient {
455
871
  constructor(options = {}) {
456
- __privateAdd$6(this, _extraProps, void 0);
457
- __privateAdd$6(this, _namespaces, {});
872
+ __privateAdd$7(this, _extraProps, void 0);
873
+ __privateAdd$7(this, _namespaces, {});
458
874
  const provider = options.host ?? "production";
459
- const apiKey = options?.apiKey ?? getAPIKey();
875
+ const apiKey = options.apiKey ?? getAPIKey();
876
+ const trace = options.trace ?? defaultTrace;
877
+ const clientID = generateUUID();
460
878
  if (!apiKey) {
461
879
  throw new Error("Could not resolve a valid apiKey");
462
880
  }
463
- __privateSet$4(this, _extraProps, {
881
+ __privateSet$7(this, _extraProps, {
464
882
  apiUrl: getHostUrl(provider, "main"),
465
883
  workspacesApiUrl: getHostUrl(provider, "workspaces"),
466
884
  fetchImpl: getFetchImplementation(options.fetch),
467
- apiKey
885
+ apiKey,
886
+ trace,
887
+ clientName: options.clientName,
888
+ clientID
468
889
  });
469
890
  }
470
891
  get user() {
471
- if (!__privateGet$5(this, _namespaces).user)
472
- __privateGet$5(this, _namespaces).user = new UserApi(__privateGet$5(this, _extraProps));
473
- return __privateGet$5(this, _namespaces).user;
892
+ if (!__privateGet$7(this, _namespaces).user)
893
+ __privateGet$7(this, _namespaces).user = new UserApi(__privateGet$7(this, _extraProps));
894
+ return __privateGet$7(this, _namespaces).user;
895
+ }
896
+ get authentication() {
897
+ if (!__privateGet$7(this, _namespaces).authentication)
898
+ __privateGet$7(this, _namespaces).authentication = new AuthenticationApi(__privateGet$7(this, _extraProps));
899
+ return __privateGet$7(this, _namespaces).authentication;
474
900
  }
475
901
  get workspaces() {
476
- if (!__privateGet$5(this, _namespaces).workspaces)
477
- __privateGet$5(this, _namespaces).workspaces = new WorkspaceApi(__privateGet$5(this, _extraProps));
478
- return __privateGet$5(this, _namespaces).workspaces;
902
+ if (!__privateGet$7(this, _namespaces).workspaces)
903
+ __privateGet$7(this, _namespaces).workspaces = new WorkspaceApi(__privateGet$7(this, _extraProps));
904
+ return __privateGet$7(this, _namespaces).workspaces;
905
+ }
906
+ get invites() {
907
+ if (!__privateGet$7(this, _namespaces).invites)
908
+ __privateGet$7(this, _namespaces).invites = new InvitesApi(__privateGet$7(this, _extraProps));
909
+ return __privateGet$7(this, _namespaces).invites;
479
910
  }
480
- get databases() {
481
- if (!__privateGet$5(this, _namespaces).databases)
482
- __privateGet$5(this, _namespaces).databases = new DatabaseApi(__privateGet$5(this, _extraProps));
483
- return __privateGet$5(this, _namespaces).databases;
911
+ get database() {
912
+ if (!__privateGet$7(this, _namespaces).database)
913
+ __privateGet$7(this, _namespaces).database = new DatabaseApi(__privateGet$7(this, _extraProps));
914
+ return __privateGet$7(this, _namespaces).database;
484
915
  }
485
916
  get branches() {
486
- if (!__privateGet$5(this, _namespaces).branches)
487
- __privateGet$5(this, _namespaces).branches = new BranchApi(__privateGet$5(this, _extraProps));
488
- return __privateGet$5(this, _namespaces).branches;
917
+ if (!__privateGet$7(this, _namespaces).branches)
918
+ __privateGet$7(this, _namespaces).branches = new BranchApi(__privateGet$7(this, _extraProps));
919
+ return __privateGet$7(this, _namespaces).branches;
920
+ }
921
+ get migrations() {
922
+ if (!__privateGet$7(this, _namespaces).migrations)
923
+ __privateGet$7(this, _namespaces).migrations = new MigrationsApi(__privateGet$7(this, _extraProps));
924
+ return __privateGet$7(this, _namespaces).migrations;
925
+ }
926
+ get migrationRequests() {
927
+ if (!__privateGet$7(this, _namespaces).migrationRequests)
928
+ __privateGet$7(this, _namespaces).migrationRequests = new MigrationRequestsApi(__privateGet$7(this, _extraProps));
929
+ return __privateGet$7(this, _namespaces).migrationRequests;
489
930
  }
490
931
  get tables() {
491
- if (!__privateGet$5(this, _namespaces).tables)
492
- __privateGet$5(this, _namespaces).tables = new TableApi(__privateGet$5(this, _extraProps));
493
- return __privateGet$5(this, _namespaces).tables;
932
+ if (!__privateGet$7(this, _namespaces).tables)
933
+ __privateGet$7(this, _namespaces).tables = new TableApi(__privateGet$7(this, _extraProps));
934
+ return __privateGet$7(this, _namespaces).tables;
494
935
  }
495
936
  get records() {
496
- if (!__privateGet$5(this, _namespaces).records)
497
- __privateGet$5(this, _namespaces).records = new RecordsApi(__privateGet$5(this, _extraProps));
498
- return __privateGet$5(this, _namespaces).records;
937
+ if (!__privateGet$7(this, _namespaces).records)
938
+ __privateGet$7(this, _namespaces).records = new RecordsApi(__privateGet$7(this, _extraProps));
939
+ return __privateGet$7(this, _namespaces).records;
940
+ }
941
+ get searchAndFilter() {
942
+ if (!__privateGet$7(this, _namespaces).searchAndFilter)
943
+ __privateGet$7(this, _namespaces).searchAndFilter = new SearchAndFilterApi(__privateGet$7(this, _extraProps));
944
+ return __privateGet$7(this, _namespaces).searchAndFilter;
499
945
  }
500
946
  }
501
947
  _extraProps = new WeakMap();
@@ -507,24 +953,29 @@ class UserApi {
507
953
  getUser() {
508
954
  return operationsByTag.users.getUser({ ...this.extraProps });
509
955
  }
510
- updateUser(user) {
956
+ updateUser({ user }) {
511
957
  return operationsByTag.users.updateUser({ body: user, ...this.extraProps });
512
958
  }
513
959
  deleteUser() {
514
960
  return operationsByTag.users.deleteUser({ ...this.extraProps });
515
961
  }
962
+ }
963
+ class AuthenticationApi {
964
+ constructor(extraProps) {
965
+ this.extraProps = extraProps;
966
+ }
516
967
  getUserAPIKeys() {
517
- return operationsByTag.users.getUserAPIKeys({ ...this.extraProps });
968
+ return operationsByTag.authentication.getUserAPIKeys({ ...this.extraProps });
518
969
  }
519
- createUserAPIKey(keyName) {
520
- return operationsByTag.users.createUserAPIKey({
521
- pathParams: { keyName },
970
+ createUserAPIKey({ name }) {
971
+ return operationsByTag.authentication.createUserAPIKey({
972
+ pathParams: { keyName: name },
522
973
  ...this.extraProps
523
974
  });
524
975
  }
525
- deleteUserAPIKey(keyName) {
526
- return operationsByTag.users.deleteUserAPIKey({
527
- pathParams: { keyName },
976
+ deleteUserAPIKey({ name }) {
977
+ return operationsByTag.authentication.deleteUserAPIKey({
978
+ pathParams: { keyName: name },
528
979
  ...this.extraProps
529
980
  });
530
981
  }
@@ -533,99 +984,114 @@ class WorkspaceApi {
533
984
  constructor(extraProps) {
534
985
  this.extraProps = extraProps;
535
986
  }
536
- createWorkspace(workspaceMeta) {
987
+ getWorkspacesList() {
988
+ return operationsByTag.workspaces.getWorkspacesList({ ...this.extraProps });
989
+ }
990
+ createWorkspace({ data }) {
537
991
  return operationsByTag.workspaces.createWorkspace({
538
- body: workspaceMeta,
992
+ body: data,
539
993
  ...this.extraProps
540
994
  });
541
995
  }
542
- getWorkspacesList() {
543
- return operationsByTag.workspaces.getWorkspacesList({ ...this.extraProps });
544
- }
545
- getWorkspace(workspaceId) {
996
+ getWorkspace({ workspace }) {
546
997
  return operationsByTag.workspaces.getWorkspace({
547
- pathParams: { workspaceId },
998
+ pathParams: { workspaceId: workspace },
548
999
  ...this.extraProps
549
1000
  });
550
1001
  }
551
- updateWorkspace(workspaceId, workspaceMeta) {
1002
+ updateWorkspace({
1003
+ workspace,
1004
+ update
1005
+ }) {
552
1006
  return operationsByTag.workspaces.updateWorkspace({
553
- pathParams: { workspaceId },
554
- body: workspaceMeta,
1007
+ pathParams: { workspaceId: workspace },
1008
+ body: update,
555
1009
  ...this.extraProps
556
1010
  });
557
1011
  }
558
- deleteWorkspace(workspaceId) {
1012
+ deleteWorkspace({ workspace }) {
559
1013
  return operationsByTag.workspaces.deleteWorkspace({
560
- pathParams: { workspaceId },
1014
+ pathParams: { workspaceId: workspace },
561
1015
  ...this.extraProps
562
1016
  });
563
1017
  }
564
- getWorkspaceMembersList(workspaceId) {
1018
+ getWorkspaceMembersList({ workspace }) {
565
1019
  return operationsByTag.workspaces.getWorkspaceMembersList({
566
- pathParams: { workspaceId },
1020
+ pathParams: { workspaceId: workspace },
567
1021
  ...this.extraProps
568
1022
  });
569
1023
  }
570
- updateWorkspaceMemberRole(workspaceId, userId, role) {
1024
+ updateWorkspaceMemberRole({
1025
+ workspace,
1026
+ user,
1027
+ role
1028
+ }) {
571
1029
  return operationsByTag.workspaces.updateWorkspaceMemberRole({
572
- pathParams: { workspaceId, userId },
1030
+ pathParams: { workspaceId: workspace, userId: user },
573
1031
  body: { role },
574
1032
  ...this.extraProps
575
1033
  });
576
1034
  }
577
- removeWorkspaceMember(workspaceId, userId) {
1035
+ removeWorkspaceMember({
1036
+ workspace,
1037
+ user
1038
+ }) {
578
1039
  return operationsByTag.workspaces.removeWorkspaceMember({
579
- pathParams: { workspaceId, userId },
580
- ...this.extraProps
581
- });
582
- }
583
- inviteWorkspaceMember(workspaceId, email, role) {
584
- return operationsByTag.workspaces.inviteWorkspaceMember({
585
- pathParams: { workspaceId },
586
- body: { email, role },
1040
+ pathParams: { workspaceId: workspace, userId: user },
587
1041
  ...this.extraProps
588
1042
  });
589
1043
  }
590
- cancelWorkspaceMemberInvite(workspaceId, inviteId) {
591
- return operationsByTag.workspaces.cancelWorkspaceMemberInvite({
592
- pathParams: { workspaceId, inviteId },
593
- ...this.extraProps
594
- });
1044
+ }
1045
+ class InvitesApi {
1046
+ constructor(extraProps) {
1047
+ this.extraProps = extraProps;
595
1048
  }
596
- resendWorkspaceMemberInvite(workspaceId, inviteId) {
597
- return operationsByTag.workspaces.resendWorkspaceMemberInvite({
598
- pathParams: { workspaceId, inviteId },
1049
+ inviteWorkspaceMember({
1050
+ workspace,
1051
+ email,
1052
+ role
1053
+ }) {
1054
+ return operationsByTag.invites.inviteWorkspaceMember({
1055
+ pathParams: { workspaceId: workspace },
1056
+ body: { email, role },
599
1057
  ...this.extraProps
600
1058
  });
601
1059
  }
602
- acceptWorkspaceMemberInvite(workspaceId, inviteKey) {
603
- return operationsByTag.workspaces.acceptWorkspaceMemberInvite({
604
- pathParams: { workspaceId, inviteKey },
1060
+ updateWorkspaceMemberInvite({
1061
+ workspace,
1062
+ invite,
1063
+ role
1064
+ }) {
1065
+ return operationsByTag.invites.updateWorkspaceMemberInvite({
1066
+ pathParams: { workspaceId: workspace, inviteId: invite },
1067
+ body: { role },
605
1068
  ...this.extraProps
606
1069
  });
607
1070
  }
608
- }
609
- class DatabaseApi {
610
- constructor(extraProps) {
611
- this.extraProps = extraProps;
612
- }
613
- getDatabaseList(workspace) {
614
- return operationsByTag.database.getDatabaseList({
615
- pathParams: { workspace },
1071
+ cancelWorkspaceMemberInvite({
1072
+ workspace,
1073
+ invite
1074
+ }) {
1075
+ return operationsByTag.invites.cancelWorkspaceMemberInvite({
1076
+ pathParams: { workspaceId: workspace, inviteId: invite },
616
1077
  ...this.extraProps
617
1078
  });
618
1079
  }
619
- createDatabase(workspace, dbName, options = {}) {
620
- return operationsByTag.database.createDatabase({
621
- pathParams: { workspace, dbName },
622
- body: options,
1080
+ acceptWorkspaceMemberInvite({
1081
+ workspace,
1082
+ key
1083
+ }) {
1084
+ return operationsByTag.invites.acceptWorkspaceMemberInvite({
1085
+ pathParams: { workspaceId: workspace, inviteKey: key },
623
1086
  ...this.extraProps
624
1087
  });
625
1088
  }
626
- deleteDatabase(workspace, dbName) {
627
- return operationsByTag.database.deleteDatabase({
628
- pathParams: { workspace, dbName },
1089
+ resendWorkspaceMemberInvite({
1090
+ workspace,
1091
+ invite
1092
+ }) {
1093
+ return operationsByTag.invites.resendWorkspaceMemberInvite({
1094
+ pathParams: { workspaceId: workspace, inviteId: invite },
629
1095
  ...this.extraProps
630
1096
  });
631
1097
  }
@@ -634,69 +1100,132 @@ class BranchApi {
634
1100
  constructor(extraProps) {
635
1101
  this.extraProps = extraProps;
636
1102
  }
637
- getBranchList(workspace, dbName) {
1103
+ getBranchList({
1104
+ workspace,
1105
+ region,
1106
+ database
1107
+ }) {
638
1108
  return operationsByTag.branch.getBranchList({
639
- pathParams: { workspace, dbName },
1109
+ pathParams: { workspace, region, dbName: database },
640
1110
  ...this.extraProps
641
1111
  });
642
1112
  }
643
- getBranchDetails(workspace, database, branch) {
1113
+ getBranchDetails({
1114
+ workspace,
1115
+ region,
1116
+ database,
1117
+ branch
1118
+ }) {
644
1119
  return operationsByTag.branch.getBranchDetails({
645
- pathParams: { workspace, dbBranchName: `${database}:${branch}` },
1120
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}` },
646
1121
  ...this.extraProps
647
1122
  });
648
1123
  }
649
- createBranch(workspace, database, branch, from = "", options = {}) {
1124
+ createBranch({
1125
+ workspace,
1126
+ region,
1127
+ database,
1128
+ branch,
1129
+ from,
1130
+ metadata
1131
+ }) {
650
1132
  return operationsByTag.branch.createBranch({
651
- pathParams: { workspace, dbBranchName: `${database}:${branch}` },
652
- queryParams: { from },
653
- body: options,
1133
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}` },
1134
+ body: { from, metadata },
654
1135
  ...this.extraProps
655
1136
  });
656
1137
  }
657
- deleteBranch(workspace, database, branch) {
1138
+ deleteBranch({
1139
+ workspace,
1140
+ region,
1141
+ database,
1142
+ branch
1143
+ }) {
658
1144
  return operationsByTag.branch.deleteBranch({
659
- pathParams: { workspace, dbBranchName: `${database}:${branch}` },
1145
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}` },
660
1146
  ...this.extraProps
661
1147
  });
662
1148
  }
663
- updateBranchMetadata(workspace, database, branch, metadata = {}) {
1149
+ updateBranchMetadata({
1150
+ workspace,
1151
+ region,
1152
+ database,
1153
+ branch,
1154
+ metadata
1155
+ }) {
664
1156
  return operationsByTag.branch.updateBranchMetadata({
665
- pathParams: { workspace, dbBranchName: `${database}:${branch}` },
1157
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}` },
666
1158
  body: metadata,
667
1159
  ...this.extraProps
668
1160
  });
669
1161
  }
670
- getBranchMetadata(workspace, database, branch) {
1162
+ getBranchMetadata({
1163
+ workspace,
1164
+ region,
1165
+ database,
1166
+ branch
1167
+ }) {
671
1168
  return operationsByTag.branch.getBranchMetadata({
672
- pathParams: { workspace, dbBranchName: `${database}:${branch}` },
1169
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}` },
673
1170
  ...this.extraProps
674
1171
  });
675
1172
  }
676
- getBranchMigrationHistory(workspace, database, branch, options = {}) {
677
- return operationsByTag.branch.getBranchMigrationHistory({
678
- pathParams: { workspace, dbBranchName: `${database}:${branch}` },
679
- body: options,
1173
+ getBranchStats({
1174
+ workspace,
1175
+ region,
1176
+ database,
1177
+ branch
1178
+ }) {
1179
+ return operationsByTag.branch.getBranchStats({
1180
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}` },
680
1181
  ...this.extraProps
681
1182
  });
682
1183
  }
683
- executeBranchMigrationPlan(workspace, database, branch, migrationPlan) {
684
- return operationsByTag.branch.executeBranchMigrationPlan({
685
- pathParams: { workspace, dbBranchName: `${database}:${branch}` },
686
- body: migrationPlan,
1184
+ getGitBranchesMapping({
1185
+ workspace,
1186
+ region,
1187
+ database
1188
+ }) {
1189
+ return operationsByTag.branch.getGitBranchesMapping({
1190
+ pathParams: { workspace, region, dbName: database },
687
1191
  ...this.extraProps
688
1192
  });
689
1193
  }
690
- getBranchMigrationPlan(workspace, database, branch, schema) {
691
- return operationsByTag.branch.getBranchMigrationPlan({
692
- pathParams: { workspace, dbBranchName: `${database}:${branch}` },
693
- body: schema,
1194
+ addGitBranchesEntry({
1195
+ workspace,
1196
+ region,
1197
+ database,
1198
+ gitBranch,
1199
+ xataBranch
1200
+ }) {
1201
+ return operationsByTag.branch.addGitBranchesEntry({
1202
+ pathParams: { workspace, region, dbName: database },
1203
+ body: { gitBranch, xataBranch },
694
1204
  ...this.extraProps
695
1205
  });
696
1206
  }
697
- getBranchStats(workspace, database, branch) {
698
- return operationsByTag.branch.getBranchStats({
699
- pathParams: { workspace, dbBranchName: `${database}:${branch}` },
1207
+ removeGitBranchesEntry({
1208
+ workspace,
1209
+ region,
1210
+ database,
1211
+ gitBranch
1212
+ }) {
1213
+ return operationsByTag.branch.removeGitBranchesEntry({
1214
+ pathParams: { workspace, region, dbName: database },
1215
+ queryParams: { gitBranch },
1216
+ ...this.extraProps
1217
+ });
1218
+ }
1219
+ resolveBranch({
1220
+ workspace,
1221
+ region,
1222
+ database,
1223
+ gitBranch,
1224
+ fallbackBranch
1225
+ }) {
1226
+ return operationsByTag.branch.resolveBranch({
1227
+ pathParams: { workspace, region, dbName: database },
1228
+ queryParams: { gitBranch, fallbackBranch },
700
1229
  ...this.extraProps
701
1230
  });
702
1231
  }
@@ -705,67 +1234,134 @@ class TableApi {
705
1234
  constructor(extraProps) {
706
1235
  this.extraProps = extraProps;
707
1236
  }
708
- createTable(workspace, database, branch, tableName) {
1237
+ createTable({
1238
+ workspace,
1239
+ region,
1240
+ database,
1241
+ branch,
1242
+ table
1243
+ }) {
709
1244
  return operationsByTag.table.createTable({
710
- pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },
1245
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}`, tableName: table },
711
1246
  ...this.extraProps
712
1247
  });
713
1248
  }
714
- deleteTable(workspace, database, branch, tableName) {
1249
+ deleteTable({
1250
+ workspace,
1251
+ region,
1252
+ database,
1253
+ branch,
1254
+ table
1255
+ }) {
715
1256
  return operationsByTag.table.deleteTable({
716
- pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },
1257
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}`, tableName: table },
717
1258
  ...this.extraProps
718
1259
  });
719
1260
  }
720
- updateTable(workspace, database, branch, tableName, options) {
1261
+ updateTable({
1262
+ workspace,
1263
+ region,
1264
+ database,
1265
+ branch,
1266
+ table,
1267
+ update
1268
+ }) {
721
1269
  return operationsByTag.table.updateTable({
722
- pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },
723
- body: options,
1270
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}`, tableName: table },
1271
+ body: update,
724
1272
  ...this.extraProps
725
1273
  });
726
1274
  }
727
- getTableSchema(workspace, database, branch, tableName) {
1275
+ getTableSchema({
1276
+ workspace,
1277
+ region,
1278
+ database,
1279
+ branch,
1280
+ table
1281
+ }) {
728
1282
  return operationsByTag.table.getTableSchema({
729
- pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },
1283
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}`, tableName: table },
730
1284
  ...this.extraProps
731
1285
  });
732
1286
  }
733
- setTableSchema(workspace, database, branch, tableName, options) {
1287
+ setTableSchema({
1288
+ workspace,
1289
+ region,
1290
+ database,
1291
+ branch,
1292
+ table,
1293
+ schema
1294
+ }) {
734
1295
  return operationsByTag.table.setTableSchema({
735
- pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },
736
- body: options,
1296
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}`, tableName: table },
1297
+ body: schema,
737
1298
  ...this.extraProps
738
1299
  });
739
1300
  }
740
- getTableColumns(workspace, database, branch, tableName) {
1301
+ getTableColumns({
1302
+ workspace,
1303
+ region,
1304
+ database,
1305
+ branch,
1306
+ table
1307
+ }) {
741
1308
  return operationsByTag.table.getTableColumns({
742
- pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },
1309
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}`, tableName: table },
743
1310
  ...this.extraProps
744
1311
  });
745
1312
  }
746
- addTableColumn(workspace, database, branch, tableName, column) {
1313
+ addTableColumn({
1314
+ workspace,
1315
+ region,
1316
+ database,
1317
+ branch,
1318
+ table,
1319
+ column
1320
+ }) {
747
1321
  return operationsByTag.table.addTableColumn({
748
- pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },
1322
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}`, tableName: table },
749
1323
  body: column,
750
1324
  ...this.extraProps
751
1325
  });
752
1326
  }
753
- getColumn(workspace, database, branch, tableName, columnName) {
1327
+ getColumn({
1328
+ workspace,
1329
+ region,
1330
+ database,
1331
+ branch,
1332
+ table,
1333
+ column
1334
+ }) {
754
1335
  return operationsByTag.table.getColumn({
755
- pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, columnName },
1336
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}`, tableName: table, columnName: column },
756
1337
  ...this.extraProps
757
1338
  });
758
1339
  }
759
- deleteColumn(workspace, database, branch, tableName, columnName) {
760
- return operationsByTag.table.deleteColumn({
761
- pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, columnName },
1340
+ updateColumn({
1341
+ workspace,
1342
+ region,
1343
+ database,
1344
+ branch,
1345
+ table,
1346
+ column,
1347
+ update
1348
+ }) {
1349
+ return operationsByTag.table.updateColumn({
1350
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}`, tableName: table, columnName: column },
1351
+ body: update,
762
1352
  ...this.extraProps
763
1353
  });
764
1354
  }
765
- updateColumn(workspace, database, branch, tableName, columnName, options) {
766
- return operationsByTag.table.updateColumn({
767
- pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, columnName },
768
- body: options,
1355
+ deleteColumn({
1356
+ workspace,
1357
+ region,
1358
+ database,
1359
+ branch,
1360
+ table,
1361
+ column
1362
+ }) {
1363
+ return operationsByTag.table.deleteColumn({
1364
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}`, tableName: table, columnName: column },
769
1365
  ...this.extraProps
770
1366
  });
771
1367
  }
@@ -774,67 +1370,511 @@ class RecordsApi {
774
1370
  constructor(extraProps) {
775
1371
  this.extraProps = extraProps;
776
1372
  }
777
- insertRecord(workspace, database, branch, tableName, record) {
1373
+ insertRecord({
1374
+ workspace,
1375
+ region,
1376
+ database,
1377
+ branch,
1378
+ table,
1379
+ record,
1380
+ columns
1381
+ }) {
778
1382
  return operationsByTag.records.insertRecord({
779
- pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },
1383
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}`, tableName: table },
1384
+ queryParams: { columns },
780
1385
  body: record,
781
1386
  ...this.extraProps
782
1387
  });
783
1388
  }
784
- insertRecordWithID(workspace, database, branch, tableName, recordId, record, options = {}) {
1389
+ getRecord({
1390
+ workspace,
1391
+ region,
1392
+ database,
1393
+ branch,
1394
+ table,
1395
+ id,
1396
+ columns
1397
+ }) {
1398
+ return operationsByTag.records.getRecord({
1399
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}`, tableName: table, recordId: id },
1400
+ queryParams: { columns },
1401
+ ...this.extraProps
1402
+ });
1403
+ }
1404
+ insertRecordWithID({
1405
+ workspace,
1406
+ region,
1407
+ database,
1408
+ branch,
1409
+ table,
1410
+ id,
1411
+ record,
1412
+ columns,
1413
+ createOnly,
1414
+ ifVersion
1415
+ }) {
785
1416
  return operationsByTag.records.insertRecordWithID({
786
- pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, recordId },
787
- queryParams: options,
1417
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}`, tableName: table, recordId: id },
1418
+ queryParams: { columns, createOnly, ifVersion },
788
1419
  body: record,
789
1420
  ...this.extraProps
790
1421
  });
791
1422
  }
792
- updateRecordWithID(workspace, database, branch, tableName, recordId, record, options = {}) {
1423
+ updateRecordWithID({
1424
+ workspace,
1425
+ region,
1426
+ database,
1427
+ branch,
1428
+ table,
1429
+ id,
1430
+ record,
1431
+ columns,
1432
+ ifVersion
1433
+ }) {
793
1434
  return operationsByTag.records.updateRecordWithID({
794
- pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, recordId },
795
- queryParams: options,
1435
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}`, tableName: table, recordId: id },
1436
+ queryParams: { columns, ifVersion },
796
1437
  body: record,
797
1438
  ...this.extraProps
798
1439
  });
799
1440
  }
800
- upsertRecordWithID(workspace, database, branch, tableName, recordId, record, options = {}) {
1441
+ upsertRecordWithID({
1442
+ workspace,
1443
+ region,
1444
+ database,
1445
+ branch,
1446
+ table,
1447
+ id,
1448
+ record,
1449
+ columns,
1450
+ ifVersion
1451
+ }) {
801
1452
  return operationsByTag.records.upsertRecordWithID({
802
- pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, recordId },
803
- queryParams: options,
1453
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}`, tableName: table, recordId: id },
1454
+ queryParams: { columns, ifVersion },
804
1455
  body: record,
805
1456
  ...this.extraProps
806
1457
  });
807
1458
  }
808
- deleteRecord(workspace, database, branch, tableName, recordId) {
1459
+ deleteRecord({
1460
+ workspace,
1461
+ region,
1462
+ database,
1463
+ branch,
1464
+ table,
1465
+ id,
1466
+ columns
1467
+ }) {
809
1468
  return operationsByTag.records.deleteRecord({
810
- pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, recordId },
1469
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}`, tableName: table, recordId: id },
1470
+ queryParams: { columns },
811
1471
  ...this.extraProps
812
1472
  });
813
1473
  }
814
- getRecord(workspace, database, branch, tableName, recordId, options = {}) {
815
- return operationsByTag.records.getRecord({
816
- pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, recordId },
1474
+ bulkInsertTableRecords({
1475
+ workspace,
1476
+ region,
1477
+ database,
1478
+ branch,
1479
+ table,
1480
+ records,
1481
+ columns
1482
+ }) {
1483
+ return operationsByTag.records.bulkInsertTableRecords({
1484
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}`, tableName: table },
1485
+ queryParams: { columns },
1486
+ body: { records },
817
1487
  ...this.extraProps
818
1488
  });
819
1489
  }
820
- bulkInsertTableRecords(workspace, database, branch, tableName, records) {
821
- return operationsByTag.records.bulkInsertTableRecords({
822
- pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },
823
- body: { records },
1490
+ branchTransaction({
1491
+ workspace,
1492
+ region,
1493
+ database,
1494
+ branch,
1495
+ operations
1496
+ }) {
1497
+ return operationsByTag.records.branchTransaction({
1498
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}` },
1499
+ body: { operations },
1500
+ ...this.extraProps
1501
+ });
1502
+ }
1503
+ }
1504
+ class SearchAndFilterApi {
1505
+ constructor(extraProps) {
1506
+ this.extraProps = extraProps;
1507
+ }
1508
+ queryTable({
1509
+ workspace,
1510
+ region,
1511
+ database,
1512
+ branch,
1513
+ table,
1514
+ filter,
1515
+ sort,
1516
+ page,
1517
+ columns,
1518
+ consistency
1519
+ }) {
1520
+ return operationsByTag.searchAndFilter.queryTable({
1521
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}`, tableName: table },
1522
+ body: { filter, sort, page, columns, consistency },
1523
+ ...this.extraProps
1524
+ });
1525
+ }
1526
+ searchTable({
1527
+ workspace,
1528
+ region,
1529
+ database,
1530
+ branch,
1531
+ table,
1532
+ query,
1533
+ fuzziness,
1534
+ target,
1535
+ prefix,
1536
+ filter,
1537
+ highlight,
1538
+ boosters
1539
+ }) {
1540
+ return operationsByTag.searchAndFilter.searchTable({
1541
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}`, tableName: table },
1542
+ body: { query, fuzziness, target, prefix, filter, highlight, boosters },
1543
+ ...this.extraProps
1544
+ });
1545
+ }
1546
+ searchBranch({
1547
+ workspace,
1548
+ region,
1549
+ database,
1550
+ branch,
1551
+ tables,
1552
+ query,
1553
+ fuzziness,
1554
+ prefix,
1555
+ highlight
1556
+ }) {
1557
+ return operationsByTag.searchAndFilter.searchBranch({
1558
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}` },
1559
+ body: { tables, query, fuzziness, prefix, highlight },
1560
+ ...this.extraProps
1561
+ });
1562
+ }
1563
+ summarizeTable({
1564
+ workspace,
1565
+ region,
1566
+ database,
1567
+ branch,
1568
+ table,
1569
+ filter,
1570
+ columns,
1571
+ summaries,
1572
+ sort,
1573
+ summariesFilter,
1574
+ page,
1575
+ consistency
1576
+ }) {
1577
+ return operationsByTag.searchAndFilter.summarizeTable({
1578
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}`, tableName: table },
1579
+ body: { filter, columns, summaries, sort, summariesFilter, page, consistency },
1580
+ ...this.extraProps
1581
+ });
1582
+ }
1583
+ aggregateTable({
1584
+ workspace,
1585
+ region,
1586
+ database,
1587
+ branch,
1588
+ table,
1589
+ filter,
1590
+ aggs
1591
+ }) {
1592
+ return operationsByTag.searchAndFilter.aggregateTable({
1593
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}`, tableName: table },
1594
+ body: { filter, aggs },
1595
+ ...this.extraProps
1596
+ });
1597
+ }
1598
+ }
1599
+ class MigrationRequestsApi {
1600
+ constructor(extraProps) {
1601
+ this.extraProps = extraProps;
1602
+ }
1603
+ queryMigrationRequests({
1604
+ workspace,
1605
+ region,
1606
+ database,
1607
+ filter,
1608
+ sort,
1609
+ page,
1610
+ columns
1611
+ }) {
1612
+ return operationsByTag.migrationRequests.queryMigrationRequests({
1613
+ pathParams: { workspace, region, dbName: database },
1614
+ body: { filter, sort, page, columns },
1615
+ ...this.extraProps
1616
+ });
1617
+ }
1618
+ createMigrationRequest({
1619
+ workspace,
1620
+ region,
1621
+ database,
1622
+ migration
1623
+ }) {
1624
+ return operationsByTag.migrationRequests.createMigrationRequest({
1625
+ pathParams: { workspace, region, dbName: database },
1626
+ body: migration,
1627
+ ...this.extraProps
1628
+ });
1629
+ }
1630
+ getMigrationRequest({
1631
+ workspace,
1632
+ region,
1633
+ database,
1634
+ migrationRequest
1635
+ }) {
1636
+ return operationsByTag.migrationRequests.getMigrationRequest({
1637
+ pathParams: { workspace, region, dbName: database, mrNumber: migrationRequest },
1638
+ ...this.extraProps
1639
+ });
1640
+ }
1641
+ updateMigrationRequest({
1642
+ workspace,
1643
+ region,
1644
+ database,
1645
+ migrationRequest,
1646
+ update
1647
+ }) {
1648
+ return operationsByTag.migrationRequests.updateMigrationRequest({
1649
+ pathParams: { workspace, region, dbName: database, mrNumber: migrationRequest },
1650
+ body: update,
1651
+ ...this.extraProps
1652
+ });
1653
+ }
1654
+ listMigrationRequestsCommits({
1655
+ workspace,
1656
+ region,
1657
+ database,
1658
+ migrationRequest,
1659
+ page
1660
+ }) {
1661
+ return operationsByTag.migrationRequests.listMigrationRequestsCommits({
1662
+ pathParams: { workspace, region, dbName: database, mrNumber: migrationRequest },
1663
+ body: { page },
1664
+ ...this.extraProps
1665
+ });
1666
+ }
1667
+ compareMigrationRequest({
1668
+ workspace,
1669
+ region,
1670
+ database,
1671
+ migrationRequest
1672
+ }) {
1673
+ return operationsByTag.migrationRequests.compareMigrationRequest({
1674
+ pathParams: { workspace, region, dbName: database, mrNumber: migrationRequest },
824
1675
  ...this.extraProps
825
1676
  });
826
1677
  }
827
- queryTable(workspace, database, branch, tableName, query) {
828
- return operationsByTag.records.queryTable({
829
- pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },
830
- body: query,
1678
+ getMigrationRequestIsMerged({
1679
+ workspace,
1680
+ region,
1681
+ database,
1682
+ migrationRequest
1683
+ }) {
1684
+ return operationsByTag.migrationRequests.getMigrationRequestIsMerged({
1685
+ pathParams: { workspace, region, dbName: database, mrNumber: migrationRequest },
1686
+ ...this.extraProps
1687
+ });
1688
+ }
1689
+ mergeMigrationRequest({
1690
+ workspace,
1691
+ region,
1692
+ database,
1693
+ migrationRequest
1694
+ }) {
1695
+ return operationsByTag.migrationRequests.mergeMigrationRequest({
1696
+ pathParams: { workspace, region, dbName: database, mrNumber: migrationRequest },
1697
+ ...this.extraProps
1698
+ });
1699
+ }
1700
+ }
1701
+ class MigrationsApi {
1702
+ constructor(extraProps) {
1703
+ this.extraProps = extraProps;
1704
+ }
1705
+ getBranchMigrationHistory({
1706
+ workspace,
1707
+ region,
1708
+ database,
1709
+ branch,
1710
+ limit,
1711
+ startFrom
1712
+ }) {
1713
+ return operationsByTag.migrations.getBranchMigrationHistory({
1714
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}` },
1715
+ body: { limit, startFrom },
1716
+ ...this.extraProps
1717
+ });
1718
+ }
1719
+ getBranchMigrationPlan({
1720
+ workspace,
1721
+ region,
1722
+ database,
1723
+ branch,
1724
+ schema
1725
+ }) {
1726
+ return operationsByTag.migrations.getBranchMigrationPlan({
1727
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}` },
1728
+ body: schema,
1729
+ ...this.extraProps
1730
+ });
1731
+ }
1732
+ executeBranchMigrationPlan({
1733
+ workspace,
1734
+ region,
1735
+ database,
1736
+ branch,
1737
+ plan
1738
+ }) {
1739
+ return operationsByTag.migrations.executeBranchMigrationPlan({
1740
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}` },
1741
+ body: plan,
1742
+ ...this.extraProps
1743
+ });
1744
+ }
1745
+ getBranchSchemaHistory({
1746
+ workspace,
1747
+ region,
1748
+ database,
1749
+ branch,
1750
+ page
1751
+ }) {
1752
+ return operationsByTag.migrations.getBranchSchemaHistory({
1753
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}` },
1754
+ body: { page },
1755
+ ...this.extraProps
1756
+ });
1757
+ }
1758
+ compareBranchWithUserSchema({
1759
+ workspace,
1760
+ region,
1761
+ database,
1762
+ branch,
1763
+ schema
1764
+ }) {
1765
+ return operationsByTag.migrations.compareBranchWithUserSchema({
1766
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}` },
1767
+ body: { schema },
1768
+ ...this.extraProps
1769
+ });
1770
+ }
1771
+ compareBranchSchemas({
1772
+ workspace,
1773
+ region,
1774
+ database,
1775
+ branch,
1776
+ compare,
1777
+ schema
1778
+ }) {
1779
+ return operationsByTag.migrations.compareBranchSchemas({
1780
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}`, branchName: compare },
1781
+ body: { schema },
1782
+ ...this.extraProps
1783
+ });
1784
+ }
1785
+ updateBranchSchema({
1786
+ workspace,
1787
+ region,
1788
+ database,
1789
+ branch,
1790
+ migration
1791
+ }) {
1792
+ return operationsByTag.migrations.updateBranchSchema({
1793
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}` },
1794
+ body: migration,
1795
+ ...this.extraProps
1796
+ });
1797
+ }
1798
+ previewBranchSchemaEdit({
1799
+ workspace,
1800
+ region,
1801
+ database,
1802
+ branch,
1803
+ data
1804
+ }) {
1805
+ return operationsByTag.migrations.previewBranchSchemaEdit({
1806
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}` },
1807
+ body: data,
1808
+ ...this.extraProps
1809
+ });
1810
+ }
1811
+ applyBranchSchemaEdit({
1812
+ workspace,
1813
+ region,
1814
+ database,
1815
+ branch,
1816
+ edits
1817
+ }) {
1818
+ return operationsByTag.migrations.applyBranchSchemaEdit({
1819
+ pathParams: { workspace, region, dbBranchName: `${database}:${branch}` },
1820
+ body: { edits },
1821
+ ...this.extraProps
1822
+ });
1823
+ }
1824
+ }
1825
+ class DatabaseApi {
1826
+ constructor(extraProps) {
1827
+ this.extraProps = extraProps;
1828
+ }
1829
+ getDatabaseList({ workspace }) {
1830
+ return operationsByTag.databases.getDatabaseList({
1831
+ pathParams: { workspaceId: workspace },
1832
+ ...this.extraProps
1833
+ });
1834
+ }
1835
+ createDatabase({
1836
+ workspace,
1837
+ database,
1838
+ data
1839
+ }) {
1840
+ return operationsByTag.databases.createDatabase({
1841
+ pathParams: { workspaceId: workspace, dbName: database },
1842
+ body: data,
1843
+ ...this.extraProps
1844
+ });
1845
+ }
1846
+ deleteDatabase({
1847
+ workspace,
1848
+ database
1849
+ }) {
1850
+ return operationsByTag.databases.deleteDatabase({
1851
+ pathParams: { workspaceId: workspace, dbName: database },
1852
+ ...this.extraProps
1853
+ });
1854
+ }
1855
+ getDatabaseMetadata({
1856
+ workspace,
1857
+ database
1858
+ }) {
1859
+ return operationsByTag.databases.getDatabaseMetadata({
1860
+ pathParams: { workspaceId: workspace, dbName: database },
1861
+ ...this.extraProps
1862
+ });
1863
+ }
1864
+ updateDatabaseMetadata({
1865
+ workspace,
1866
+ database,
1867
+ metadata
1868
+ }) {
1869
+ return operationsByTag.databases.updateDatabaseMetadata({
1870
+ pathParams: { workspaceId: workspace, dbName: database },
1871
+ body: metadata,
831
1872
  ...this.extraProps
832
1873
  });
833
1874
  }
834
- searchBranch(workspace, database, branch, query) {
835
- return operationsByTag.records.searchBranch({
836
- pathParams: { workspace, dbBranchName: `${database}:${branch}` },
837
- body: query,
1875
+ listRegions({ workspace }) {
1876
+ return operationsByTag.databases.listRegions({
1877
+ pathParams: { workspaceId: workspace },
838
1878
  ...this.extraProps
839
1879
  });
840
1880
  }
@@ -850,43 +1890,50 @@ class XataApiPlugin {
850
1890
  class XataPlugin {
851
1891
  }
852
1892
 
853
- var __accessCheck$5 = (obj, member, msg) => {
1893
+ function cleanFilter(filter) {
1894
+ if (!filter)
1895
+ return void 0;
1896
+ const values = Object.values(filter).filter(Boolean).filter((value) => Array.isArray(value) ? value.length > 0 : true);
1897
+ return values.length > 0 ? filter : void 0;
1898
+ }
1899
+
1900
+ var __accessCheck$6 = (obj, member, msg) => {
854
1901
  if (!member.has(obj))
855
1902
  throw TypeError("Cannot " + msg);
856
1903
  };
857
- var __privateGet$4 = (obj, member, getter) => {
858
- __accessCheck$5(obj, member, "read from private field");
1904
+ var __privateGet$6 = (obj, member, getter) => {
1905
+ __accessCheck$6(obj, member, "read from private field");
859
1906
  return getter ? getter.call(obj) : member.get(obj);
860
1907
  };
861
- var __privateAdd$5 = (obj, member, value) => {
1908
+ var __privateAdd$6 = (obj, member, value) => {
862
1909
  if (member.has(obj))
863
1910
  throw TypeError("Cannot add the same private member more than once");
864
1911
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
865
1912
  };
866
- var __privateSet$3 = (obj, member, value, setter) => {
867
- __accessCheck$5(obj, member, "write to private field");
1913
+ var __privateSet$6 = (obj, member, value, setter) => {
1914
+ __accessCheck$6(obj, member, "write to private field");
868
1915
  setter ? setter.call(obj, value) : member.set(obj, value);
869
1916
  return value;
870
1917
  };
871
- var _query;
1918
+ var _query, _page;
872
1919
  class Page {
873
1920
  constructor(query, meta, records = []) {
874
- __privateAdd$5(this, _query, void 0);
875
- __privateSet$3(this, _query, query);
1921
+ __privateAdd$6(this, _query, void 0);
1922
+ __privateSet$6(this, _query, query);
876
1923
  this.meta = meta;
877
- this.records = records;
1924
+ this.records = new RecordArray(this, records);
878
1925
  }
879
1926
  async nextPage(size, offset) {
880
- return __privateGet$4(this, _query).getPaginated({ page: { size, offset, after: this.meta.page.cursor } });
1927
+ return __privateGet$6(this, _query).getPaginated({ pagination: { size, offset, after: this.meta.page.cursor } });
881
1928
  }
882
1929
  async previousPage(size, offset) {
883
- return __privateGet$4(this, _query).getPaginated({ page: { size, offset, before: this.meta.page.cursor } });
1930
+ return __privateGet$6(this, _query).getPaginated({ pagination: { size, offset, before: this.meta.page.cursor } });
884
1931
  }
885
- async firstPage(size, offset) {
886
- return __privateGet$4(this, _query).getPaginated({ page: { size, offset, first: this.meta.page.cursor } });
1932
+ async startPage(size, offset) {
1933
+ return __privateGet$6(this, _query).getPaginated({ pagination: { size, offset, start: this.meta.page.cursor } });
887
1934
  }
888
- async lastPage(size, offset) {
889
- return __privateGet$4(this, _query).getPaginated({ page: { size, offset, last: this.meta.page.cursor } });
1935
+ async endPage(size, offset) {
1936
+ return __privateGet$6(this, _query).getPaginated({ pagination: { size, offset, end: this.meta.page.cursor } });
890
1937
  }
891
1938
  hasNextPage() {
892
1939
  return this.meta.page.more;
@@ -894,50 +1941,112 @@ class Page {
894
1941
  }
895
1942
  _query = new WeakMap();
896
1943
  const PAGINATION_MAX_SIZE = 200;
897
- const PAGINATION_DEFAULT_SIZE = 200;
1944
+ const PAGINATION_DEFAULT_SIZE = 20;
898
1945
  const PAGINATION_MAX_OFFSET = 800;
899
1946
  const PAGINATION_DEFAULT_OFFSET = 0;
1947
+ function isCursorPaginationOptions(options) {
1948
+ return isDefined(options) && (isDefined(options.start) || isDefined(options.end) || isDefined(options.after) || isDefined(options.before));
1949
+ }
1950
+ const _RecordArray = class extends Array {
1951
+ constructor(...args) {
1952
+ super(..._RecordArray.parseConstructorParams(...args));
1953
+ __privateAdd$6(this, _page, void 0);
1954
+ __privateSet$6(this, _page, isObject(args[0]?.meta) ? args[0] : { meta: { page: { cursor: "", more: false } }, records: [] });
1955
+ }
1956
+ static parseConstructorParams(...args) {
1957
+ if (args.length === 1 && typeof args[0] === "number") {
1958
+ return new Array(args[0]);
1959
+ }
1960
+ if (args.length <= 2 && isObject(args[0]?.meta) && Array.isArray(args[1] ?? [])) {
1961
+ const result = args[1] ?? args[0].records ?? [];
1962
+ return new Array(...result);
1963
+ }
1964
+ return new Array(...args);
1965
+ }
1966
+ toArray() {
1967
+ return new Array(...this);
1968
+ }
1969
+ toSerializable() {
1970
+ return JSON.parse(this.toString());
1971
+ }
1972
+ toString() {
1973
+ return JSON.stringify(this.toArray());
1974
+ }
1975
+ map(callbackfn, thisArg) {
1976
+ return this.toArray().map(callbackfn, thisArg);
1977
+ }
1978
+ async nextPage(size, offset) {
1979
+ const newPage = await __privateGet$6(this, _page).nextPage(size, offset);
1980
+ return new _RecordArray(newPage);
1981
+ }
1982
+ async previousPage(size, offset) {
1983
+ const newPage = await __privateGet$6(this, _page).previousPage(size, offset);
1984
+ return new _RecordArray(newPage);
1985
+ }
1986
+ async startPage(size, offset) {
1987
+ const newPage = await __privateGet$6(this, _page).startPage(size, offset);
1988
+ return new _RecordArray(newPage);
1989
+ }
1990
+ async endPage(size, offset) {
1991
+ const newPage = await __privateGet$6(this, _page).endPage(size, offset);
1992
+ return new _RecordArray(newPage);
1993
+ }
1994
+ hasNextPage() {
1995
+ return __privateGet$6(this, _page).meta.page.more;
1996
+ }
1997
+ };
1998
+ let RecordArray = _RecordArray;
1999
+ _page = new WeakMap();
900
2000
 
901
- var __accessCheck$4 = (obj, member, msg) => {
2001
+ var __accessCheck$5 = (obj, member, msg) => {
902
2002
  if (!member.has(obj))
903
2003
  throw TypeError("Cannot " + msg);
904
2004
  };
905
- var __privateGet$3 = (obj, member, getter) => {
906
- __accessCheck$4(obj, member, "read from private field");
2005
+ var __privateGet$5 = (obj, member, getter) => {
2006
+ __accessCheck$5(obj, member, "read from private field");
907
2007
  return getter ? getter.call(obj) : member.get(obj);
908
2008
  };
909
- var __privateAdd$4 = (obj, member, value) => {
2009
+ var __privateAdd$5 = (obj, member, value) => {
910
2010
  if (member.has(obj))
911
2011
  throw TypeError("Cannot add the same private member more than once");
912
2012
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
913
2013
  };
914
- var __privateSet$2 = (obj, member, value, setter) => {
915
- __accessCheck$4(obj, member, "write to private field");
2014
+ var __privateSet$5 = (obj, member, value, setter) => {
2015
+ __accessCheck$5(obj, member, "write to private field");
916
2016
  setter ? setter.call(obj, value) : member.set(obj, value);
917
2017
  return value;
918
2018
  };
919
- var _table$1, _repository, _data;
2019
+ var __privateMethod$3 = (obj, member, method) => {
2020
+ __accessCheck$5(obj, member, "access private method");
2021
+ return method;
2022
+ };
2023
+ var _table$1, _repository, _data, _cleanFilterConstraint, cleanFilterConstraint_fn;
920
2024
  const _Query = class {
921
- constructor(repository, table, data, parent) {
922
- __privateAdd$4(this, _table$1, void 0);
923
- __privateAdd$4(this, _repository, void 0);
924
- __privateAdd$4(this, _data, { filter: {} });
2025
+ constructor(repository, table, data, rawParent) {
2026
+ __privateAdd$5(this, _cleanFilterConstraint);
2027
+ __privateAdd$5(this, _table$1, void 0);
2028
+ __privateAdd$5(this, _repository, void 0);
2029
+ __privateAdd$5(this, _data, { filter: {} });
925
2030
  this.meta = { page: { cursor: "start", more: true } };
926
- this.records = [];
927
- __privateSet$2(this, _table$1, table);
2031
+ this.records = new RecordArray(this, []);
2032
+ __privateSet$5(this, _table$1, table);
928
2033
  if (repository) {
929
- __privateSet$2(this, _repository, repository);
2034
+ __privateSet$5(this, _repository, repository);
930
2035
  } else {
931
- __privateSet$2(this, _repository, this);
2036
+ __privateSet$5(this, _repository, this);
932
2037
  }
933
- __privateGet$3(this, _data).filter = data.filter ?? parent?.filter ?? {};
934
- __privateGet$3(this, _data).filter.$any = data.filter?.$any ?? parent?.filter?.$any;
935
- __privateGet$3(this, _data).filter.$all = data.filter?.$all ?? parent?.filter?.$all;
936
- __privateGet$3(this, _data).filter.$not = data.filter?.$not ?? parent?.filter?.$not;
937
- __privateGet$3(this, _data).filter.$none = data.filter?.$none ?? parent?.filter?.$none;
938
- __privateGet$3(this, _data).sort = data.sort ?? parent?.sort;
939
- __privateGet$3(this, _data).columns = data.columns ?? parent?.columns ?? ["*"];
940
- __privateGet$3(this, _data).page = data.page ?? parent?.page;
2038
+ const parent = cleanParent(data, rawParent);
2039
+ __privateGet$5(this, _data).filter = data.filter ?? parent?.filter ?? {};
2040
+ __privateGet$5(this, _data).filter.$any = data.filter?.$any ?? parent?.filter?.$any;
2041
+ __privateGet$5(this, _data).filter.$all = data.filter?.$all ?? parent?.filter?.$all;
2042
+ __privateGet$5(this, _data).filter.$not = data.filter?.$not ?? parent?.filter?.$not;
2043
+ __privateGet$5(this, _data).filter.$none = data.filter?.$none ?? parent?.filter?.$none;
2044
+ __privateGet$5(this, _data).sort = data.sort ?? parent?.sort;
2045
+ __privateGet$5(this, _data).columns = data.columns ?? parent?.columns;
2046
+ __privateGet$5(this, _data).consistency = data.consistency ?? parent?.consistency;
2047
+ __privateGet$5(this, _data).pagination = data.pagination ?? parent?.pagination;
2048
+ __privateGet$5(this, _data).cache = data.cache ?? parent?.cache;
2049
+ __privateGet$5(this, _data).fetchOptions = data.fetchOptions ?? parent?.fetchOptions;
941
2050
  this.any = this.any.bind(this);
942
2051
  this.all = this.all.bind(this);
943
2052
  this.not = this.not.bind(this);
@@ -948,87 +2057,133 @@ const _Query = class {
948
2057
  Object.defineProperty(this, "repository", { enumerable: false });
949
2058
  }
950
2059
  getQueryOptions() {
951
- return __privateGet$3(this, _data);
2060
+ return __privateGet$5(this, _data);
2061
+ }
2062
+ key() {
2063
+ const { columns = [], filter = {}, sort = [], pagination = {} } = __privateGet$5(this, _data);
2064
+ const key = JSON.stringify({ columns, filter, sort, pagination });
2065
+ return toBase64(key);
952
2066
  }
953
2067
  any(...queries) {
954
2068
  const $any = queries.map((query) => query.getQueryOptions().filter ?? {});
955
- return new _Query(__privateGet$3(this, _repository), __privateGet$3(this, _table$1), { filter: { $any } }, __privateGet$3(this, _data));
2069
+ return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { filter: { $any } }, __privateGet$5(this, _data));
956
2070
  }
957
2071
  all(...queries) {
958
2072
  const $all = queries.map((query) => query.getQueryOptions().filter ?? {});
959
- return new _Query(__privateGet$3(this, _repository), __privateGet$3(this, _table$1), { filter: { $all } }, __privateGet$3(this, _data));
2073
+ return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { filter: { $all } }, __privateGet$5(this, _data));
960
2074
  }
961
2075
  not(...queries) {
962
2076
  const $not = queries.map((query) => query.getQueryOptions().filter ?? {});
963
- return new _Query(__privateGet$3(this, _repository), __privateGet$3(this, _table$1), { filter: { $not } }, __privateGet$3(this, _data));
2077
+ return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { filter: { $not } }, __privateGet$5(this, _data));
964
2078
  }
965
2079
  none(...queries) {
966
2080
  const $none = queries.map((query) => query.getQueryOptions().filter ?? {});
967
- return new _Query(__privateGet$3(this, _repository), __privateGet$3(this, _table$1), { filter: { $none } }, __privateGet$3(this, _data));
2081
+ return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { filter: { $none } }, __privateGet$5(this, _data));
968
2082
  }
969
2083
  filter(a, b) {
970
2084
  if (arguments.length === 1) {
971
- const constraints = Object.entries(a).map(([column, constraint]) => ({ [column]: constraint }));
972
- const $all = compact([__privateGet$3(this, _data).filter?.$all].flat().concat(constraints));
973
- return new _Query(__privateGet$3(this, _repository), __privateGet$3(this, _table$1), { filter: { $all } }, __privateGet$3(this, _data));
2085
+ const constraints = Object.entries(a ?? {}).map(([column, constraint]) => ({
2086
+ [column]: __privateMethod$3(this, _cleanFilterConstraint, cleanFilterConstraint_fn).call(this, column, constraint)
2087
+ }));
2088
+ const $all = compact([__privateGet$5(this, _data).filter?.$all].flat().concat(constraints));
2089
+ return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { filter: { $all } }, __privateGet$5(this, _data));
974
2090
  } else {
975
- const $all = compact([__privateGet$3(this, _data).filter?.$all].flat().concat([{ [a]: b }]));
976
- return new _Query(__privateGet$3(this, _repository), __privateGet$3(this, _table$1), { filter: { $all } }, __privateGet$3(this, _data));
2091
+ const constraints = isDefined(a) && isDefined(b) ? [{ [a]: __privateMethod$3(this, _cleanFilterConstraint, cleanFilterConstraint_fn).call(this, a, b) }] : void 0;
2092
+ const $all = compact([__privateGet$5(this, _data).filter?.$all].flat().concat(constraints));
2093
+ return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { filter: { $all } }, __privateGet$5(this, _data));
977
2094
  }
978
2095
  }
979
- sort(column, direction) {
980
- const originalSort = [__privateGet$3(this, _data).sort ?? []].flat();
2096
+ sort(column, direction = "asc") {
2097
+ const originalSort = [__privateGet$5(this, _data).sort ?? []].flat();
981
2098
  const sort = [...originalSort, { column, direction }];
982
- return new _Query(__privateGet$3(this, _repository), __privateGet$3(this, _table$1), { sort }, __privateGet$3(this, _data));
2099
+ return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { sort }, __privateGet$5(this, _data));
983
2100
  }
984
2101
  select(columns) {
985
- return new _Query(__privateGet$3(this, _repository), __privateGet$3(this, _table$1), { columns }, __privateGet$3(this, _data));
2102
+ return new _Query(
2103
+ __privateGet$5(this, _repository),
2104
+ __privateGet$5(this, _table$1),
2105
+ { columns },
2106
+ __privateGet$5(this, _data)
2107
+ );
986
2108
  }
987
2109
  getPaginated(options = {}) {
988
- const query = new _Query(__privateGet$3(this, _repository), __privateGet$3(this, _table$1), options, __privateGet$3(this, _data));
989
- return __privateGet$3(this, _repository).query(query);
2110
+ const query = new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), options, __privateGet$5(this, _data));
2111
+ return __privateGet$5(this, _repository).query(query);
990
2112
  }
991
2113
  async *[Symbol.asyncIterator]() {
992
- for await (const [record] of this.getIterator(1)) {
2114
+ for await (const [record] of this.getIterator({ batchSize: 1 })) {
993
2115
  yield record;
994
2116
  }
995
2117
  }
996
- async *getIterator(chunk, options = {}) {
997
- let offset = 0;
998
- let end = false;
999
- while (!end) {
1000
- const { records, meta } = await this.getPaginated({ ...options, page: { size: chunk, offset } });
1001
- yield records;
1002
- offset += chunk;
1003
- end = !meta.page.more;
2118
+ async *getIterator(options = {}) {
2119
+ const { batchSize = 1 } = options;
2120
+ let page = await this.getPaginated({ ...options, pagination: { size: batchSize, offset: 0 } });
2121
+ let more = page.hasNextPage();
2122
+ yield page.records;
2123
+ while (more) {
2124
+ page = await page.nextPage();
2125
+ more = page.hasNextPage();
2126
+ yield page.records;
1004
2127
  }
1005
2128
  }
1006
2129
  async getMany(options = {}) {
1007
- const { records } = await this.getPaginated(options);
1008
- return records;
2130
+ const { pagination = {}, ...rest } = options;
2131
+ const { size = PAGINATION_DEFAULT_SIZE, offset } = pagination;
2132
+ const batchSize = size <= PAGINATION_MAX_SIZE ? size : PAGINATION_MAX_SIZE;
2133
+ let page = await this.getPaginated({ ...rest, pagination: { size: batchSize, offset } });
2134
+ const results = [...page.records];
2135
+ while (page.hasNextPage() && results.length < size) {
2136
+ page = await page.nextPage();
2137
+ results.push(...page.records);
2138
+ }
2139
+ if (page.hasNextPage() && options.pagination?.size === void 0) {
2140
+ console.trace("Calling getMany does not return all results. Paginate to get all results or call getAll.");
2141
+ }
2142
+ const array = new RecordArray(page, results.slice(0, size));
2143
+ return array;
1009
2144
  }
1010
- async getAll(chunk = PAGINATION_MAX_SIZE, options = {}) {
2145
+ async getAll(options = {}) {
2146
+ const { batchSize = PAGINATION_MAX_SIZE, ...rest } = options;
1011
2147
  const results = [];
1012
- for await (const page of this.getIterator(chunk, options)) {
2148
+ for await (const page of this.getIterator({ ...rest, batchSize })) {
1013
2149
  results.push(...page);
1014
2150
  }
1015
2151
  return results;
1016
2152
  }
1017
- async getOne(options = {}) {
1018
- const records = await this.getMany({ ...options, page: { size: 1 } });
1019
- return records[0] || null;
2153
+ async getFirst(options = {}) {
2154
+ const records = await this.getMany({ ...options, pagination: { size: 1 } });
2155
+ return records[0] ?? null;
2156
+ }
2157
+ async getFirstOrThrow(options = {}) {
2158
+ const records = await this.getMany({ ...options, pagination: { size: 1 } });
2159
+ if (records[0] === void 0)
2160
+ throw new Error("No results found.");
2161
+ return records[0];
2162
+ }
2163
+ async summarize(params = {}) {
2164
+ const { summaries, summariesFilter, ...options } = params;
2165
+ const query = new _Query(
2166
+ __privateGet$5(this, _repository),
2167
+ __privateGet$5(this, _table$1),
2168
+ options,
2169
+ __privateGet$5(this, _data)
2170
+ );
2171
+ return __privateGet$5(this, _repository).summarizeTable(query, summaries, summariesFilter);
2172
+ }
2173
+ cache(ttl) {
2174
+ return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { cache: ttl }, __privateGet$5(this, _data));
1020
2175
  }
1021
2176
  nextPage(size, offset) {
1022
- return this.firstPage(size, offset);
2177
+ return this.startPage(size, offset);
1023
2178
  }
1024
2179
  previousPage(size, offset) {
1025
- return this.firstPage(size, offset);
2180
+ return this.startPage(size, offset);
1026
2181
  }
1027
- firstPage(size, offset) {
1028
- return this.getPaginated({ page: { size, offset } });
2182
+ startPage(size, offset) {
2183
+ return this.getPaginated({ pagination: { size, offset } });
1029
2184
  }
1030
- lastPage(size, offset) {
1031
- return this.getPaginated({ page: { size, offset, before: "end" } });
2185
+ endPage(size, offset) {
2186
+ return this.getPaginated({ pagination: { size, offset, before: "end" } });
1032
2187
  }
1033
2188
  hasNextPage() {
1034
2189
  return this.meta.page.more;
@@ -1038,12 +2193,31 @@ let Query = _Query;
1038
2193
  _table$1 = new WeakMap();
1039
2194
  _repository = new WeakMap();
1040
2195
  _data = new WeakMap();
2196
+ _cleanFilterConstraint = new WeakSet();
2197
+ cleanFilterConstraint_fn = function(column, value) {
2198
+ const columnType = __privateGet$5(this, _table$1).schema?.columns.find(({ name }) => name === column)?.type;
2199
+ if (columnType === "multiple" && (isString(value) || isStringArray(value))) {
2200
+ return { $includes: value };
2201
+ }
2202
+ if (columnType === "link" && isObject(value) && isString(value.id)) {
2203
+ return value.id;
2204
+ }
2205
+ return value;
2206
+ };
2207
+ function cleanParent(data, parent) {
2208
+ if (isCursorPaginationOptions(data.pagination)) {
2209
+ return { ...parent, sort: void 0, filter: void 0 };
2210
+ }
2211
+ return parent;
2212
+ }
1041
2213
 
1042
2214
  function isIdentifiable(x) {
1043
2215
  return isObject(x) && isString(x?.id);
1044
2216
  }
1045
2217
  function isXataRecord(x) {
1046
- return isIdentifiable(x) && typeof x?.xata === "object" && typeof x?.xata?.version === "number";
2218
+ const record = x;
2219
+ const metadata = record?.getMetadata();
2220
+ return isIdentifiable(x) && isObject(metadata) && typeof metadata.version === "number";
1047
2221
  }
1048
2222
 
1049
2223
  function isSortFilterString(value) {
@@ -1069,249 +2243,624 @@ function buildSortFilter(filter) {
1069
2243
  }
1070
2244
  }
1071
2245
 
1072
- var __accessCheck$3 = (obj, member, msg) => {
2246
+ var __accessCheck$4 = (obj, member, msg) => {
1073
2247
  if (!member.has(obj))
1074
2248
  throw TypeError("Cannot " + msg);
1075
- };
1076
- var __privateGet$2 = (obj, member, getter) => {
1077
- __accessCheck$3(obj, member, "read from private field");
2249
+ };
2250
+ var __privateGet$4 = (obj, member, getter) => {
2251
+ __accessCheck$4(obj, member, "read from private field");
1078
2252
  return getter ? getter.call(obj) : member.get(obj);
1079
2253
  };
1080
- var __privateAdd$3 = (obj, member, value) => {
2254
+ var __privateAdd$4 = (obj, member, value) => {
1081
2255
  if (member.has(obj))
1082
2256
  throw TypeError("Cannot add the same private member more than once");
1083
2257
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
1084
2258
  };
1085
- var __privateSet$1 = (obj, member, value, setter) => {
1086
- __accessCheck$3(obj, member, "write to private field");
2259
+ var __privateSet$4 = (obj, member, value, setter) => {
2260
+ __accessCheck$4(obj, member, "write to private field");
1087
2261
  setter ? setter.call(obj, value) : member.set(obj, value);
1088
2262
  return value;
1089
2263
  };
1090
2264
  var __privateMethod$2 = (obj, member, method) => {
1091
- __accessCheck$3(obj, member, "access private method");
2265
+ __accessCheck$4(obj, member, "access private method");
1092
2266
  return method;
1093
2267
  };
1094
- var _table, _links, _getFetchProps, _insertRecordWithoutId, insertRecordWithoutId_fn, _insertRecordWithId, insertRecordWithId_fn, _bulkInsertTableRecords, bulkInsertTableRecords_fn, _updateRecordWithID, updateRecordWithID_fn, _upsertRecordWithID, upsertRecordWithID_fn, _deleteRecord, deleteRecord_fn;
2268
+ var _table, _getFetchProps, _db, _cache, _schemaTables$2, _trace, _insertRecordWithoutId, insertRecordWithoutId_fn, _insertRecordWithId, insertRecordWithId_fn, _insertRecords, insertRecords_fn, _updateRecordWithID, updateRecordWithID_fn, _updateRecords, updateRecords_fn, _upsertRecordWithID, upsertRecordWithID_fn, _deleteRecord, deleteRecord_fn, _deleteRecords, deleteRecords_fn, _setCacheQuery, setCacheQuery_fn, _getCacheQuery, getCacheQuery_fn, _getSchemaTables$1, getSchemaTables_fn$1;
2269
+ const BULK_OPERATION_MAX_SIZE = 1e3;
1095
2270
  class Repository extends Query {
1096
2271
  }
1097
2272
  class RestRepository extends Query {
1098
2273
  constructor(options) {
1099
- super(null, options.table, {});
1100
- __privateAdd$3(this, _insertRecordWithoutId);
1101
- __privateAdd$3(this, _insertRecordWithId);
1102
- __privateAdd$3(this, _bulkInsertTableRecords);
1103
- __privateAdd$3(this, _updateRecordWithID);
1104
- __privateAdd$3(this, _upsertRecordWithID);
1105
- __privateAdd$3(this, _deleteRecord);
1106
- __privateAdd$3(this, _table, void 0);
1107
- __privateAdd$3(this, _links, void 0);
1108
- __privateAdd$3(this, _getFetchProps, void 0);
1109
- __privateSet$1(this, _table, options.table);
1110
- __privateSet$1(this, _links, options.links ?? {});
1111
- __privateSet$1(this, _getFetchProps, options.getFetchProps);
1112
- this.db = options.db;
1113
- }
1114
- async create(a, b) {
1115
- if (Array.isArray(a)) {
1116
- return __privateMethod$2(this, _bulkInsertTableRecords, bulkInsertTableRecords_fn).call(this, a);
1117
- }
1118
- if (isString(a) && isObject(b)) {
1119
- if (a === "")
1120
- throw new Error("The id can't be empty");
1121
- return __privateMethod$2(this, _insertRecordWithId, insertRecordWithId_fn).call(this, a, b);
1122
- }
1123
- if (isObject(a) && isString(a.id)) {
1124
- if (a.id === "")
1125
- throw new Error("The id can't be empty");
1126
- return __privateMethod$2(this, _insertRecordWithId, insertRecordWithId_fn).call(this, a.id, { ...a, id: void 0 });
1127
- }
1128
- if (isObject(a)) {
1129
- return __privateMethod$2(this, _insertRecordWithoutId, insertRecordWithoutId_fn).call(this, a);
1130
- }
1131
- throw new Error("Invalid arguments for create method");
1132
- }
1133
- async read(recordId) {
1134
- const fetchProps = await __privateGet$2(this, _getFetchProps).call(this);
1135
- try {
1136
- const response = await getRecord({
1137
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$2(this, _table), recordId },
1138
- ...fetchProps
2274
+ super(
2275
+ null,
2276
+ { name: options.table, schema: options.schemaTables?.find((table) => table.name === options.table) },
2277
+ {}
2278
+ );
2279
+ __privateAdd$4(this, _insertRecordWithoutId);
2280
+ __privateAdd$4(this, _insertRecordWithId);
2281
+ __privateAdd$4(this, _insertRecords);
2282
+ __privateAdd$4(this, _updateRecordWithID);
2283
+ __privateAdd$4(this, _updateRecords);
2284
+ __privateAdd$4(this, _upsertRecordWithID);
2285
+ __privateAdd$4(this, _deleteRecord);
2286
+ __privateAdd$4(this, _deleteRecords);
2287
+ __privateAdd$4(this, _setCacheQuery);
2288
+ __privateAdd$4(this, _getCacheQuery);
2289
+ __privateAdd$4(this, _getSchemaTables$1);
2290
+ __privateAdd$4(this, _table, void 0);
2291
+ __privateAdd$4(this, _getFetchProps, void 0);
2292
+ __privateAdd$4(this, _db, void 0);
2293
+ __privateAdd$4(this, _cache, void 0);
2294
+ __privateAdd$4(this, _schemaTables$2, void 0);
2295
+ __privateAdd$4(this, _trace, void 0);
2296
+ __privateSet$4(this, _table, options.table);
2297
+ __privateSet$4(this, _db, options.db);
2298
+ __privateSet$4(this, _cache, options.pluginOptions.cache);
2299
+ __privateSet$4(this, _schemaTables$2, options.schemaTables);
2300
+ __privateSet$4(this, _getFetchProps, async () => {
2301
+ const props = await options.pluginOptions.getFetchProps();
2302
+ return { ...props, sessionID: generateUUID() };
2303
+ });
2304
+ const trace = options.pluginOptions.trace ?? defaultTrace;
2305
+ __privateSet$4(this, _trace, async (name, fn, options2 = {}) => {
2306
+ return trace(name, fn, {
2307
+ ...options2,
2308
+ [TraceAttributes.TABLE]: __privateGet$4(this, _table),
2309
+ [TraceAttributes.KIND]: "sdk-operation",
2310
+ [TraceAttributes.VERSION]: VERSION
1139
2311
  });
1140
- return initObject(this.db, __privateGet$2(this, _links), __privateGet$2(this, _table), response);
1141
- } catch (e) {
1142
- if (isObject(e) && e.status === 404) {
1143
- return null;
2312
+ });
2313
+ }
2314
+ async create(a, b, c, d) {
2315
+ return __privateGet$4(this, _trace).call(this, "create", async () => {
2316
+ const ifVersion = parseIfVersion(b, c, d);
2317
+ if (Array.isArray(a)) {
2318
+ if (a.length === 0)
2319
+ return [];
2320
+ const ids = await __privateMethod$2(this, _insertRecords, insertRecords_fn).call(this, a, { ifVersion, createOnly: true });
2321
+ const columns = isStringArray(b) ? b : ["*"];
2322
+ const result = await this.read(ids, columns);
2323
+ return result;
1144
2324
  }
1145
- throw e;
1146
- }
2325
+ if (isString(a) && isObject(b)) {
2326
+ if (a === "")
2327
+ throw new Error("The id can't be empty");
2328
+ const columns = isStringArray(c) ? c : void 0;
2329
+ return await __privateMethod$2(this, _insertRecordWithId, insertRecordWithId_fn).call(this, a, b, columns, { createOnly: true, ifVersion });
2330
+ }
2331
+ if (isObject(a) && isString(a.id)) {
2332
+ if (a.id === "")
2333
+ throw new Error("The id can't be empty");
2334
+ const columns = isStringArray(b) ? b : void 0;
2335
+ return await __privateMethod$2(this, _insertRecordWithId, insertRecordWithId_fn).call(this, a.id, { ...a, id: void 0 }, columns, { createOnly: true, ifVersion });
2336
+ }
2337
+ if (isObject(a)) {
2338
+ const columns = isStringArray(b) ? b : void 0;
2339
+ return __privateMethod$2(this, _insertRecordWithoutId, insertRecordWithoutId_fn).call(this, a, columns);
2340
+ }
2341
+ throw new Error("Invalid arguments for create method");
2342
+ });
1147
2343
  }
1148
- async update(a, b) {
1149
- if (Array.isArray(a)) {
1150
- if (a.length > 100) {
1151
- console.warn("Bulk update operation is not optimized in the Xata API yet, this request might be slow");
2344
+ async read(a, b) {
2345
+ return __privateGet$4(this, _trace).call(this, "read", async () => {
2346
+ const columns = isStringArray(b) ? b : ["*"];
2347
+ if (Array.isArray(a)) {
2348
+ if (a.length === 0)
2349
+ return [];
2350
+ const ids = a.map((item) => extractId(item));
2351
+ const finalObjects = await this.getAll({ filter: { id: { $any: compact(ids) } }, columns });
2352
+ const dictionary = finalObjects.reduce((acc, object) => {
2353
+ acc[object.id] = object;
2354
+ return acc;
2355
+ }, {});
2356
+ return ids.map((id2) => dictionary[id2 ?? ""] ?? null);
1152
2357
  }
1153
- return Promise.all(a.map((object) => this.update(object)));
1154
- }
1155
- if (isString(a) && isObject(b)) {
1156
- return __privateMethod$2(this, _updateRecordWithID, updateRecordWithID_fn).call(this, a, b);
1157
- }
1158
- if (isObject(a) && isString(a.id)) {
1159
- return __privateMethod$2(this, _updateRecordWithID, updateRecordWithID_fn).call(this, a.id, { ...a, id: void 0 });
1160
- }
1161
- throw new Error("Invalid arguments for update method");
2358
+ const id = extractId(a);
2359
+ if (id) {
2360
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
2361
+ try {
2362
+ const response = await getRecord({
2363
+ pathParams: {
2364
+ workspace: "{workspaceId}",
2365
+ dbBranchName: "{dbBranch}",
2366
+ region: "{region}",
2367
+ tableName: __privateGet$4(this, _table),
2368
+ recordId: id
2369
+ },
2370
+ queryParams: { columns },
2371
+ ...fetchProps
2372
+ });
2373
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
2374
+ return initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), response, columns);
2375
+ } catch (e) {
2376
+ if (isObject(e) && e.status === 404) {
2377
+ return null;
2378
+ }
2379
+ throw e;
2380
+ }
2381
+ }
2382
+ return null;
2383
+ });
1162
2384
  }
1163
- async createOrUpdate(a, b) {
1164
- if (Array.isArray(a)) {
1165
- if (a.length > 100) {
1166
- console.warn("Bulk update operation is not optimized in the Xata API yet, this request might be slow");
2385
+ async readOrThrow(a, b) {
2386
+ return __privateGet$4(this, _trace).call(this, "readOrThrow", async () => {
2387
+ const result = await this.read(a, b);
2388
+ if (Array.isArray(result)) {
2389
+ const missingIds = compact(
2390
+ a.filter((_item, index) => result[index] === null).map((item) => extractId(item))
2391
+ );
2392
+ if (missingIds.length > 0) {
2393
+ throw new Error(`Could not find records with ids: ${missingIds.join(", ")}`);
2394
+ }
2395
+ return result;
1167
2396
  }
1168
- return Promise.all(a.map((object) => this.createOrUpdate(object)));
1169
- }
1170
- if (isString(a) && isObject(b)) {
1171
- return __privateMethod$2(this, _upsertRecordWithID, upsertRecordWithID_fn).call(this, a, b);
1172
- }
1173
- if (isObject(a) && isString(a.id)) {
1174
- return __privateMethod$2(this, _upsertRecordWithID, upsertRecordWithID_fn).call(this, a.id, { ...a, id: void 0 });
1175
- }
1176
- throw new Error("Invalid arguments for createOrUpdate method");
2397
+ if (result === null) {
2398
+ const id = extractId(a) ?? "unknown";
2399
+ throw new Error(`Record with id ${id} not found`);
2400
+ }
2401
+ return result;
2402
+ });
1177
2403
  }
1178
- async delete(recordId) {
1179
- if (Array.isArray(recordId)) {
1180
- if (recordId.length > 100) {
1181
- console.warn("Bulk delete operation is not optimized in the Xata API yet, this request might be slow");
2404
+ async update(a, b, c, d) {
2405
+ return __privateGet$4(this, _trace).call(this, "update", async () => {
2406
+ const ifVersion = parseIfVersion(b, c, d);
2407
+ if (Array.isArray(a)) {
2408
+ if (a.length === 0)
2409
+ return [];
2410
+ const existing = await this.read(a, ["id"]);
2411
+ const updates = a.filter((_item, index) => existing[index] !== null);
2412
+ await __privateMethod$2(this, _updateRecords, updateRecords_fn).call(this, updates, {
2413
+ ifVersion,
2414
+ upsert: false
2415
+ });
2416
+ const columns = isStringArray(b) ? b : ["*"];
2417
+ const result = await this.read(a, columns);
2418
+ return result;
1182
2419
  }
1183
- await Promise.all(recordId.map((id) => this.delete(id)));
1184
- return;
1185
- }
1186
- if (isString(recordId)) {
1187
- await __privateMethod$2(this, _deleteRecord, deleteRecord_fn).call(this, recordId);
1188
- return;
1189
- }
1190
- if (isObject(recordId) && isString(recordId.id)) {
1191
- await __privateMethod$2(this, _deleteRecord, deleteRecord_fn).call(this, recordId.id);
1192
- return;
1193
- }
1194
- throw new Error("Invalid arguments for delete method");
2420
+ try {
2421
+ if (isString(a) && isObject(b)) {
2422
+ const columns = isStringArray(c) ? c : void 0;
2423
+ return await __privateMethod$2(this, _updateRecordWithID, updateRecordWithID_fn).call(this, a, b, columns, { ifVersion });
2424
+ }
2425
+ if (isObject(a) && isString(a.id)) {
2426
+ const columns = isStringArray(b) ? b : void 0;
2427
+ return await __privateMethod$2(this, _updateRecordWithID, updateRecordWithID_fn).call(this, a.id, { ...a, id: void 0 }, columns, { ifVersion });
2428
+ }
2429
+ } catch (error) {
2430
+ if (error.status === 422)
2431
+ return null;
2432
+ throw error;
2433
+ }
2434
+ throw new Error("Invalid arguments for update method");
2435
+ });
2436
+ }
2437
+ async updateOrThrow(a, b, c, d) {
2438
+ return __privateGet$4(this, _trace).call(this, "updateOrThrow", async () => {
2439
+ const result = await this.update(a, b, c, d);
2440
+ if (Array.isArray(result)) {
2441
+ const missingIds = compact(
2442
+ a.filter((_item, index) => result[index] === null).map((item) => extractId(item))
2443
+ );
2444
+ if (missingIds.length > 0) {
2445
+ throw new Error(`Could not find records with ids: ${missingIds.join(", ")}`);
2446
+ }
2447
+ return result;
2448
+ }
2449
+ if (result === null) {
2450
+ const id = extractId(a) ?? "unknown";
2451
+ throw new Error(`Record with id ${id} not found`);
2452
+ }
2453
+ return result;
2454
+ });
2455
+ }
2456
+ async createOrUpdate(a, b, c, d) {
2457
+ return __privateGet$4(this, _trace).call(this, "createOrUpdate", async () => {
2458
+ const ifVersion = parseIfVersion(b, c, d);
2459
+ if (Array.isArray(a)) {
2460
+ if (a.length === 0)
2461
+ return [];
2462
+ await __privateMethod$2(this, _updateRecords, updateRecords_fn).call(this, a, {
2463
+ ifVersion,
2464
+ upsert: true
2465
+ });
2466
+ const columns = isStringArray(b) ? b : ["*"];
2467
+ const result = await this.read(a, columns);
2468
+ return result;
2469
+ }
2470
+ if (isString(a) && isObject(b)) {
2471
+ const columns = isStringArray(c) ? c : void 0;
2472
+ return __privateMethod$2(this, _upsertRecordWithID, upsertRecordWithID_fn).call(this, a, b, columns, { ifVersion });
2473
+ }
2474
+ if (isObject(a) && isString(a.id)) {
2475
+ const columns = isStringArray(c) ? c : void 0;
2476
+ return __privateMethod$2(this, _upsertRecordWithID, upsertRecordWithID_fn).call(this, a.id, { ...a, id: void 0 }, columns, { ifVersion });
2477
+ }
2478
+ throw new Error("Invalid arguments for createOrUpdate method");
2479
+ });
2480
+ }
2481
+ async createOrReplace(a, b, c, d) {
2482
+ return __privateGet$4(this, _trace).call(this, "createOrReplace", async () => {
2483
+ const ifVersion = parseIfVersion(b, c, d);
2484
+ if (Array.isArray(a)) {
2485
+ if (a.length === 0)
2486
+ return [];
2487
+ const ids = await __privateMethod$2(this, _insertRecords, insertRecords_fn).call(this, a, { ifVersion, createOnly: false });
2488
+ const columns = isStringArray(b) ? b : ["*"];
2489
+ const result = await this.read(ids, columns);
2490
+ return result;
2491
+ }
2492
+ if (isString(a) && isObject(b)) {
2493
+ const columns = isStringArray(c) ? c : void 0;
2494
+ return __privateMethod$2(this, _insertRecordWithId, insertRecordWithId_fn).call(this, a, b, columns, { createOnly: false, ifVersion });
2495
+ }
2496
+ if (isObject(a) && isString(a.id)) {
2497
+ const columns = isStringArray(c) ? c : void 0;
2498
+ return __privateMethod$2(this, _insertRecordWithId, insertRecordWithId_fn).call(this, a.id, { ...a, id: void 0 }, columns, { createOnly: false, ifVersion });
2499
+ }
2500
+ throw new Error("Invalid arguments for createOrReplace method");
2501
+ });
2502
+ }
2503
+ async delete(a, b) {
2504
+ return __privateGet$4(this, _trace).call(this, "delete", async () => {
2505
+ if (Array.isArray(a)) {
2506
+ if (a.length === 0)
2507
+ return [];
2508
+ const ids = a.map((o) => {
2509
+ if (isString(o))
2510
+ return o;
2511
+ if (isString(o.id))
2512
+ return o.id;
2513
+ throw new Error("Invalid arguments for delete method");
2514
+ });
2515
+ const columns = isStringArray(b) ? b : ["*"];
2516
+ const result = await this.read(a, columns);
2517
+ await __privateMethod$2(this, _deleteRecords, deleteRecords_fn).call(this, ids);
2518
+ return result;
2519
+ }
2520
+ if (isString(a)) {
2521
+ return __privateMethod$2(this, _deleteRecord, deleteRecord_fn).call(this, a, b);
2522
+ }
2523
+ if (isObject(a) && isString(a.id)) {
2524
+ return __privateMethod$2(this, _deleteRecord, deleteRecord_fn).call(this, a.id, b);
2525
+ }
2526
+ throw new Error("Invalid arguments for delete method");
2527
+ });
2528
+ }
2529
+ async deleteOrThrow(a, b) {
2530
+ return __privateGet$4(this, _trace).call(this, "deleteOrThrow", async () => {
2531
+ const result = await this.delete(a, b);
2532
+ if (Array.isArray(result)) {
2533
+ const missingIds = compact(
2534
+ a.filter((_item, index) => result[index] === null).map((item) => extractId(item))
2535
+ );
2536
+ if (missingIds.length > 0) {
2537
+ throw new Error(`Could not find records with ids: ${missingIds.join(", ")}`);
2538
+ }
2539
+ return result;
2540
+ } else if (result === null) {
2541
+ const id = extractId(a) ?? "unknown";
2542
+ throw new Error(`Record with id ${id} not found`);
2543
+ }
2544
+ return result;
2545
+ });
1195
2546
  }
1196
2547
  async search(query, options = {}) {
1197
- const fetchProps = await __privateGet$2(this, _getFetchProps).call(this);
1198
- const { records } = await searchBranch({
1199
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}" },
1200
- body: { tables: [__privateGet$2(this, _table)], query, fuzziness: options.fuzziness },
1201
- ...fetchProps
2548
+ return __privateGet$4(this, _trace).call(this, "search", async () => {
2549
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
2550
+ const { records } = await searchTable({
2551
+ pathParams: {
2552
+ workspace: "{workspaceId}",
2553
+ dbBranchName: "{dbBranch}",
2554
+ region: "{region}",
2555
+ tableName: __privateGet$4(this, _table)
2556
+ },
2557
+ body: {
2558
+ query,
2559
+ fuzziness: options.fuzziness,
2560
+ prefix: options.prefix,
2561
+ highlight: options.highlight,
2562
+ filter: options.filter,
2563
+ boosters: options.boosters,
2564
+ page: options.page,
2565
+ target: options.target
2566
+ },
2567
+ ...fetchProps
2568
+ });
2569
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
2570
+ return records.map((item) => initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), item, ["*"]));
2571
+ });
2572
+ }
2573
+ async aggregate(aggs, filter) {
2574
+ return __privateGet$4(this, _trace).call(this, "aggregate", async () => {
2575
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
2576
+ const result = await aggregateTable({
2577
+ pathParams: {
2578
+ workspace: "{workspaceId}",
2579
+ dbBranchName: "{dbBranch}",
2580
+ region: "{region}",
2581
+ tableName: __privateGet$4(this, _table)
2582
+ },
2583
+ body: { aggs, filter },
2584
+ ...fetchProps
2585
+ });
2586
+ return result;
1202
2587
  });
1203
- return records.map((item) => initObject(this.db, __privateGet$2(this, _links), __privateGet$2(this, _table), item));
1204
2588
  }
1205
2589
  async query(query) {
1206
- const data = query.getQueryOptions();
1207
- const body = {
1208
- filter: Object.values(data.filter ?? {}).some(Boolean) ? data.filter : void 0,
1209
- sort: data.sort ? buildSortFilter(data.sort) : void 0,
1210
- page: data.page,
1211
- columns: data.columns
1212
- };
1213
- const fetchProps = await __privateGet$2(this, _getFetchProps).call(this);
1214
- const { meta, records: objects } = await queryTable({
1215
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$2(this, _table) },
1216
- body,
1217
- ...fetchProps
2590
+ return __privateGet$4(this, _trace).call(this, "query", async () => {
2591
+ const cacheQuery = await __privateMethod$2(this, _getCacheQuery, getCacheQuery_fn).call(this, query);
2592
+ if (cacheQuery)
2593
+ return new Page(query, cacheQuery.meta, cacheQuery.records);
2594
+ const data = query.getQueryOptions();
2595
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
2596
+ const { meta, records: objects } = await queryTable({
2597
+ pathParams: {
2598
+ workspace: "{workspaceId}",
2599
+ dbBranchName: "{dbBranch}",
2600
+ region: "{region}",
2601
+ tableName: __privateGet$4(this, _table)
2602
+ },
2603
+ body: {
2604
+ filter: cleanFilter(data.filter),
2605
+ sort: data.sort !== void 0 ? buildSortFilter(data.sort) : void 0,
2606
+ page: data.pagination,
2607
+ columns: data.columns ?? ["*"],
2608
+ consistency: data.consistency
2609
+ },
2610
+ fetchOptions: data.fetchOptions,
2611
+ ...fetchProps
2612
+ });
2613
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
2614
+ const records = objects.map(
2615
+ (record) => initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), record, data.columns ?? ["*"])
2616
+ );
2617
+ await __privateMethod$2(this, _setCacheQuery, setCacheQuery_fn).call(this, query, meta, records);
2618
+ return new Page(query, meta, records);
2619
+ });
2620
+ }
2621
+ async summarizeTable(query, summaries, summariesFilter) {
2622
+ return __privateGet$4(this, _trace).call(this, "summarize", async () => {
2623
+ const data = query.getQueryOptions();
2624
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
2625
+ const result = await summarizeTable({
2626
+ pathParams: {
2627
+ workspace: "{workspaceId}",
2628
+ dbBranchName: "{dbBranch}",
2629
+ region: "{region}",
2630
+ tableName: __privateGet$4(this, _table)
2631
+ },
2632
+ body: {
2633
+ filter: cleanFilter(data.filter),
2634
+ sort: data.sort !== void 0 ? buildSortFilter(data.sort) : void 0,
2635
+ columns: data.columns,
2636
+ consistency: data.consistency,
2637
+ page: data.pagination?.size !== void 0 ? { size: data.pagination?.size } : void 0,
2638
+ summaries,
2639
+ summariesFilter
2640
+ },
2641
+ ...fetchProps
2642
+ });
2643
+ return result;
1218
2644
  });
1219
- const records = objects.map((record) => initObject(this.db, __privateGet$2(this, _links), __privateGet$2(this, _table), record));
1220
- return new Page(query, meta, records);
1221
2645
  }
1222
2646
  }
1223
2647
  _table = new WeakMap();
1224
- _links = new WeakMap();
1225
2648
  _getFetchProps = new WeakMap();
2649
+ _db = new WeakMap();
2650
+ _cache = new WeakMap();
2651
+ _schemaTables$2 = new WeakMap();
2652
+ _trace = new WeakMap();
1226
2653
  _insertRecordWithoutId = new WeakSet();
1227
- insertRecordWithoutId_fn = async function(object) {
1228
- const fetchProps = await __privateGet$2(this, _getFetchProps).call(this);
2654
+ insertRecordWithoutId_fn = async function(object, columns = ["*"]) {
2655
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1229
2656
  const record = transformObjectLinks(object);
1230
2657
  const response = await insertRecord({
1231
2658
  pathParams: {
1232
2659
  workspace: "{workspaceId}",
1233
2660
  dbBranchName: "{dbBranch}",
1234
- tableName: __privateGet$2(this, _table)
2661
+ region: "{region}",
2662
+ tableName: __privateGet$4(this, _table)
1235
2663
  },
2664
+ queryParams: { columns },
1236
2665
  body: record,
1237
2666
  ...fetchProps
1238
2667
  });
1239
- const finalObject = await this.read(response.id);
1240
- if (!finalObject) {
1241
- throw new Error("The server failed to save the record");
1242
- }
1243
- return finalObject;
2668
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
2669
+ return initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), response, columns);
1244
2670
  };
1245
2671
  _insertRecordWithId = new WeakSet();
1246
- insertRecordWithId_fn = async function(recordId, object) {
1247
- const fetchProps = await __privateGet$2(this, _getFetchProps).call(this);
2672
+ insertRecordWithId_fn = async function(recordId, object, columns = ["*"], { createOnly, ifVersion }) {
2673
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1248
2674
  const record = transformObjectLinks(object);
1249
2675
  const response = await insertRecordWithID({
1250
2676
  pathParams: {
1251
2677
  workspace: "{workspaceId}",
1252
2678
  dbBranchName: "{dbBranch}",
1253
- tableName: __privateGet$2(this, _table),
2679
+ region: "{region}",
2680
+ tableName: __privateGet$4(this, _table),
1254
2681
  recordId
1255
2682
  },
1256
2683
  body: record,
1257
- queryParams: { createOnly: true },
1258
- ...fetchProps
1259
- });
1260
- const finalObject = await this.read(response.id);
1261
- if (!finalObject) {
1262
- throw new Error("The server failed to save the record");
1263
- }
1264
- return finalObject;
1265
- };
1266
- _bulkInsertTableRecords = new WeakSet();
1267
- bulkInsertTableRecords_fn = async function(objects) {
1268
- const fetchProps = await __privateGet$2(this, _getFetchProps).call(this);
1269
- const records = objects.map((object) => transformObjectLinks(object));
1270
- const response = await bulkInsertTableRecords({
1271
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$2(this, _table) },
1272
- body: { records },
2684
+ queryParams: { createOnly, columns, ifVersion },
1273
2685
  ...fetchProps
1274
2686
  });
1275
- const finalObjects = await this.any(...response.recordIDs.map((id) => this.filter("id", id))).getAll();
1276
- if (finalObjects.length !== objects.length) {
1277
- throw new Error("The server failed to save some records");
2687
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
2688
+ return initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), response, columns);
2689
+ };
2690
+ _insertRecords = new WeakSet();
2691
+ insertRecords_fn = async function(objects, { createOnly, ifVersion }) {
2692
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
2693
+ const chunkedOperations = chunk(
2694
+ objects.map((object) => ({
2695
+ insert: { table: __privateGet$4(this, _table), record: transformObjectLinks(object), createOnly, ifVersion }
2696
+ })),
2697
+ BULK_OPERATION_MAX_SIZE
2698
+ );
2699
+ const ids = [];
2700
+ for (const operations of chunkedOperations) {
2701
+ const { results } = await branchTransaction({
2702
+ pathParams: {
2703
+ workspace: "{workspaceId}",
2704
+ dbBranchName: "{dbBranch}",
2705
+ region: "{region}"
2706
+ },
2707
+ body: { operations },
2708
+ ...fetchProps
2709
+ });
2710
+ for (const result of results) {
2711
+ if (result.operation === "insert") {
2712
+ ids.push(result.id);
2713
+ } else {
2714
+ ids.push(null);
2715
+ }
2716
+ }
1278
2717
  }
1279
- return finalObjects;
2718
+ return ids;
1280
2719
  };
1281
2720
  _updateRecordWithID = new WeakSet();
1282
- updateRecordWithID_fn = async function(recordId, object) {
1283
- const fetchProps = await __privateGet$2(this, _getFetchProps).call(this);
1284
- const record = transformObjectLinks(object);
1285
- const response = await updateRecordWithID({
1286
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$2(this, _table), recordId },
1287
- body: record,
1288
- ...fetchProps
1289
- });
1290
- const item = await this.read(response.id);
1291
- if (!item)
1292
- throw new Error("The server failed to save the record");
1293
- return item;
2721
+ updateRecordWithID_fn = async function(recordId, object, columns = ["*"], { ifVersion }) {
2722
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
2723
+ const { id: _id, ...record } = transformObjectLinks(object);
2724
+ try {
2725
+ const response = await updateRecordWithID({
2726
+ pathParams: {
2727
+ workspace: "{workspaceId}",
2728
+ dbBranchName: "{dbBranch}",
2729
+ region: "{region}",
2730
+ tableName: __privateGet$4(this, _table),
2731
+ recordId
2732
+ },
2733
+ queryParams: { columns, ifVersion },
2734
+ body: record,
2735
+ ...fetchProps
2736
+ });
2737
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
2738
+ return initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), response, columns);
2739
+ } catch (e) {
2740
+ if (isObject(e) && e.status === 404) {
2741
+ return null;
2742
+ }
2743
+ throw e;
2744
+ }
2745
+ };
2746
+ _updateRecords = new WeakSet();
2747
+ updateRecords_fn = async function(objects, { ifVersion, upsert }) {
2748
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
2749
+ const chunkedOperations = chunk(
2750
+ objects.map(({ id, ...object }) => ({
2751
+ update: { table: __privateGet$4(this, _table), id, ifVersion, upsert, fields: transformObjectLinks(object) }
2752
+ })),
2753
+ BULK_OPERATION_MAX_SIZE
2754
+ );
2755
+ const ids = [];
2756
+ for (const operations of chunkedOperations) {
2757
+ const { results } = await branchTransaction({
2758
+ pathParams: {
2759
+ workspace: "{workspaceId}",
2760
+ dbBranchName: "{dbBranch}",
2761
+ region: "{region}"
2762
+ },
2763
+ body: { operations },
2764
+ ...fetchProps
2765
+ });
2766
+ for (const result of results) {
2767
+ if (result.operation === "update") {
2768
+ ids.push(result.id);
2769
+ } else {
2770
+ ids.push(null);
2771
+ }
2772
+ }
2773
+ }
2774
+ return ids;
1294
2775
  };
1295
2776
  _upsertRecordWithID = new WeakSet();
1296
- upsertRecordWithID_fn = async function(recordId, object) {
1297
- const fetchProps = await __privateGet$2(this, _getFetchProps).call(this);
2777
+ upsertRecordWithID_fn = async function(recordId, object, columns = ["*"], { ifVersion }) {
2778
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1298
2779
  const response = await upsertRecordWithID({
1299
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$2(this, _table), recordId },
2780
+ pathParams: {
2781
+ workspace: "{workspaceId}",
2782
+ dbBranchName: "{dbBranch}",
2783
+ region: "{region}",
2784
+ tableName: __privateGet$4(this, _table),
2785
+ recordId
2786
+ },
2787
+ queryParams: { columns, ifVersion },
1300
2788
  body: object,
1301
2789
  ...fetchProps
1302
2790
  });
1303
- const item = await this.read(response.id);
1304
- if (!item)
1305
- throw new Error("The server failed to save the record");
1306
- return item;
2791
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
2792
+ return initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), response, columns);
1307
2793
  };
1308
2794
  _deleteRecord = new WeakSet();
1309
- deleteRecord_fn = async function(recordId) {
1310
- const fetchProps = await __privateGet$2(this, _getFetchProps).call(this);
1311
- await deleteRecord({
1312
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$2(this, _table), recordId },
2795
+ deleteRecord_fn = async function(recordId, columns = ["*"]) {
2796
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
2797
+ try {
2798
+ const response = await deleteRecord({
2799
+ pathParams: {
2800
+ workspace: "{workspaceId}",
2801
+ dbBranchName: "{dbBranch}",
2802
+ region: "{region}",
2803
+ tableName: __privateGet$4(this, _table),
2804
+ recordId
2805
+ },
2806
+ queryParams: { columns },
2807
+ ...fetchProps
2808
+ });
2809
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
2810
+ return initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), response, columns);
2811
+ } catch (e) {
2812
+ if (isObject(e) && e.status === 404) {
2813
+ return null;
2814
+ }
2815
+ throw e;
2816
+ }
2817
+ };
2818
+ _deleteRecords = new WeakSet();
2819
+ deleteRecords_fn = async function(recordIds) {
2820
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
2821
+ const chunkedOperations = chunk(
2822
+ recordIds.map((id) => ({ delete: { table: __privateGet$4(this, _table), id } })),
2823
+ BULK_OPERATION_MAX_SIZE
2824
+ );
2825
+ for (const operations of chunkedOperations) {
2826
+ await branchTransaction({
2827
+ pathParams: {
2828
+ workspace: "{workspaceId}",
2829
+ dbBranchName: "{dbBranch}",
2830
+ region: "{region}"
2831
+ },
2832
+ body: { operations },
2833
+ ...fetchProps
2834
+ });
2835
+ }
2836
+ };
2837
+ _setCacheQuery = new WeakSet();
2838
+ setCacheQuery_fn = async function(query, meta, records) {
2839
+ await __privateGet$4(this, _cache).set(`query_${__privateGet$4(this, _table)}:${query.key()}`, { date: new Date(), meta, records });
2840
+ };
2841
+ _getCacheQuery = new WeakSet();
2842
+ getCacheQuery_fn = async function(query) {
2843
+ const key = `query_${__privateGet$4(this, _table)}:${query.key()}`;
2844
+ const result = await __privateGet$4(this, _cache).get(key);
2845
+ if (!result)
2846
+ return null;
2847
+ const { cache: ttl = __privateGet$4(this, _cache).defaultQueryTTL } = query.getQueryOptions();
2848
+ if (ttl < 0)
2849
+ return null;
2850
+ const hasExpired = result.date.getTime() + ttl < Date.now();
2851
+ return hasExpired ? null : result;
2852
+ };
2853
+ _getSchemaTables$1 = new WeakSet();
2854
+ getSchemaTables_fn$1 = async function() {
2855
+ if (__privateGet$4(this, _schemaTables$2))
2856
+ return __privateGet$4(this, _schemaTables$2);
2857
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
2858
+ const { schema } = await getBranchDetails({
2859
+ pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", region: "{region}" },
1313
2860
  ...fetchProps
1314
2861
  });
2862
+ __privateSet$4(this, _schemaTables$2, schema.tables);
2863
+ return schema.tables;
1315
2864
  };
1316
2865
  const transformObjectLinks = (object) => {
1317
2866
  return Object.entries(object).reduce((acc, [key, value]) => {
@@ -1320,45 +2869,181 @@ const transformObjectLinks = (object) => {
1320
2869
  return { ...acc, [key]: isIdentifiable(value) ? value.id : value };
1321
2870
  }, {});
1322
2871
  };
1323
- const initObject = (db, links, table, object) => {
1324
- const result = {};
1325
- Object.assign(result, object);
1326
- const tableLinks = links[table] || [];
1327
- for (const link of tableLinks) {
1328
- const [field, linkTable] = link;
1329
- const value = result[field];
1330
- if (value && isObject(value)) {
1331
- result[field] = initObject(db, links, linkTable, value);
2872
+ const initObject = (db, schemaTables, table, object, selectedColumns) => {
2873
+ const data = {};
2874
+ const { xata, ...rest } = object ?? {};
2875
+ Object.assign(data, rest);
2876
+ const { columns } = schemaTables.find(({ name }) => name === table) ?? {};
2877
+ if (!columns)
2878
+ console.error(`Table ${table} not found in schema`);
2879
+ for (const column of columns ?? []) {
2880
+ if (!isValidColumn(selectedColumns, column))
2881
+ continue;
2882
+ const value = data[column.name];
2883
+ switch (column.type) {
2884
+ case "datetime": {
2885
+ const date = value !== void 0 ? new Date(value) : null;
2886
+ if (date !== null && isNaN(date.getTime())) {
2887
+ console.error(`Failed to parse date ${value} for field ${column.name}`);
2888
+ } else {
2889
+ data[column.name] = date;
2890
+ }
2891
+ break;
2892
+ }
2893
+ case "link": {
2894
+ const linkTable = column.link?.table;
2895
+ if (!linkTable) {
2896
+ console.error(`Failed to parse link for field ${column.name}`);
2897
+ } else if (isObject(value)) {
2898
+ const selectedLinkColumns = selectedColumns.reduce((acc, item) => {
2899
+ if (item === column.name) {
2900
+ return [...acc, "*"];
2901
+ }
2902
+ if (item.startsWith(`${column.name}.`)) {
2903
+ const [, ...path] = item.split(".");
2904
+ return [...acc, path.join(".")];
2905
+ }
2906
+ return acc;
2907
+ }, []);
2908
+ data[column.name] = initObject(db, schemaTables, linkTable, value, selectedLinkColumns);
2909
+ } else {
2910
+ data[column.name] = null;
2911
+ }
2912
+ break;
2913
+ }
2914
+ default:
2915
+ data[column.name] = value ?? null;
2916
+ if (column.notNull === true && value === null) {
2917
+ console.error(`Parse error, column ${column.name} is non nullable and value resolves null`);
2918
+ }
2919
+ break;
1332
2920
  }
1333
2921
  }
1334
- result.read = function() {
1335
- return db[table].read(result["id"]);
2922
+ const record = { ...data };
2923
+ record.read = function(columns2) {
2924
+ return db[table].read(record["id"], columns2);
2925
+ };
2926
+ record.update = function(data2, b, c) {
2927
+ const columns2 = isStringArray(b) ? b : ["*"];
2928
+ const ifVersion = parseIfVersion(b, c);
2929
+ return db[table].update(record["id"], data2, columns2, { ifVersion });
2930
+ };
2931
+ record.replace = function(data2, b, c) {
2932
+ const columns2 = isStringArray(b) ? b : ["*"];
2933
+ const ifVersion = parseIfVersion(b, c);
2934
+ return db[table].createOrReplace(record["id"], data2, columns2, { ifVersion });
1336
2935
  };
1337
- result.update = function(data) {
1338
- return db[table].update(result["id"], data);
2936
+ record.delete = function() {
2937
+ return db[table].delete(record["id"]);
1339
2938
  };
1340
- result.delete = function() {
1341
- return db[table].delete(result["id"]);
2939
+ record.getMetadata = function() {
2940
+ return xata;
1342
2941
  };
1343
- for (const prop of ["read", "update", "delete"]) {
1344
- Object.defineProperty(result, prop, { enumerable: false });
2942
+ record.toSerializable = function() {
2943
+ return JSON.parse(JSON.stringify(transformObjectLinks(data)));
2944
+ };
2945
+ record.toString = function() {
2946
+ return JSON.stringify(transformObjectLinks(data));
2947
+ };
2948
+ for (const prop of ["read", "update", "replace", "delete", "getMetadata", "toSerializable", "toString"]) {
2949
+ Object.defineProperty(record, prop, { enumerable: false });
1345
2950
  }
1346
- Object.freeze(result);
1347
- return result;
2951
+ Object.freeze(record);
2952
+ return record;
2953
+ };
2954
+ function extractId(value) {
2955
+ if (isString(value))
2956
+ return value;
2957
+ if (isObject(value) && isString(value.id))
2958
+ return value.id;
2959
+ return void 0;
2960
+ }
2961
+ function isValidColumn(columns, column) {
2962
+ if (columns.includes("*"))
2963
+ return true;
2964
+ if (column.type === "link") {
2965
+ const linkColumns = columns.filter((item) => item.startsWith(column.name));
2966
+ return linkColumns.length > 0;
2967
+ }
2968
+ return columns.includes(column.name);
2969
+ }
2970
+ function parseIfVersion(...args) {
2971
+ for (const arg of args) {
2972
+ if (isObject(arg) && isNumber(arg.ifVersion)) {
2973
+ return arg.ifVersion;
2974
+ }
2975
+ }
2976
+ return void 0;
2977
+ }
2978
+
2979
+ var __accessCheck$3 = (obj, member, msg) => {
2980
+ if (!member.has(obj))
2981
+ throw TypeError("Cannot " + msg);
2982
+ };
2983
+ var __privateGet$3 = (obj, member, getter) => {
2984
+ __accessCheck$3(obj, member, "read from private field");
2985
+ return getter ? getter.call(obj) : member.get(obj);
2986
+ };
2987
+ var __privateAdd$3 = (obj, member, value) => {
2988
+ if (member.has(obj))
2989
+ throw TypeError("Cannot add the same private member more than once");
2990
+ member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
2991
+ };
2992
+ var __privateSet$3 = (obj, member, value, setter) => {
2993
+ __accessCheck$3(obj, member, "write to private field");
2994
+ setter ? setter.call(obj, value) : member.set(obj, value);
2995
+ return value;
1348
2996
  };
2997
+ var _map;
2998
+ class SimpleCache {
2999
+ constructor(options = {}) {
3000
+ __privateAdd$3(this, _map, void 0);
3001
+ __privateSet$3(this, _map, /* @__PURE__ */ new Map());
3002
+ this.capacity = options.max ?? 500;
3003
+ this.defaultQueryTTL = options.defaultQueryTTL ?? 60 * 1e3;
3004
+ }
3005
+ async getAll() {
3006
+ return Object.fromEntries(__privateGet$3(this, _map));
3007
+ }
3008
+ async get(key) {
3009
+ return __privateGet$3(this, _map).get(key) ?? null;
3010
+ }
3011
+ async set(key, value) {
3012
+ await this.delete(key);
3013
+ __privateGet$3(this, _map).set(key, value);
3014
+ if (__privateGet$3(this, _map).size > this.capacity) {
3015
+ const leastRecentlyUsed = __privateGet$3(this, _map).keys().next().value;
3016
+ await this.delete(leastRecentlyUsed);
3017
+ }
3018
+ }
3019
+ async delete(key) {
3020
+ __privateGet$3(this, _map).delete(key);
3021
+ }
3022
+ async clear() {
3023
+ return __privateGet$3(this, _map).clear();
3024
+ }
3025
+ }
3026
+ _map = new WeakMap();
1349
3027
 
1350
- const gt = (value) => ({ $gt: value });
1351
- const ge = (value) => ({ $ge: value });
1352
- const gte = (value) => ({ $ge: value });
1353
- const lt = (value) => ({ $lt: value });
1354
- const lte = (value) => ({ $le: value });
1355
- const le = (value) => ({ $le: value });
3028
+ const greaterThan = (value) => ({ $gt: value });
3029
+ const gt = greaterThan;
3030
+ const greaterThanEquals = (value) => ({ $ge: value });
3031
+ const greaterEquals = greaterThanEquals;
3032
+ const gte = greaterThanEquals;
3033
+ const ge = greaterThanEquals;
3034
+ const lessThan = (value) => ({ $lt: value });
3035
+ const lt = lessThan;
3036
+ const lessThanEquals = (value) => ({ $le: value });
3037
+ const lessEquals = lessThanEquals;
3038
+ const lte = lessThanEquals;
3039
+ const le = lessThanEquals;
1356
3040
  const exists = (column) => ({ $exists: column });
1357
3041
  const notExists = (column) => ({ $notExists: column });
1358
3042
  const startsWith = (value) => ({ $startsWith: value });
1359
3043
  const endsWith = (value) => ({ $endsWith: value });
1360
3044
  const pattern = (value) => ({ $pattern: value });
1361
3045
  const is = (value) => ({ $is: value });
3046
+ const equals = is;
1362
3047
  const isNot = (value) => ({ $isNot: value });
1363
3048
  const contains = (value) => ({ $contains: value });
1364
3049
  const includes = (value) => ({ $includes: value });
@@ -1370,7 +3055,7 @@ var __accessCheck$2 = (obj, member, msg) => {
1370
3055
  if (!member.has(obj))
1371
3056
  throw TypeError("Cannot " + msg);
1372
3057
  };
1373
- var __privateGet$1 = (obj, member, getter) => {
3058
+ var __privateGet$2 = (obj, member, getter) => {
1374
3059
  __accessCheck$2(obj, member, "read from private field");
1375
3060
  return getter ? getter.call(obj) : member.get(obj);
1376
3061
  };
@@ -1379,143 +3064,207 @@ var __privateAdd$2 = (obj, member, value) => {
1379
3064
  throw TypeError("Cannot add the same private member more than once");
1380
3065
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
1381
3066
  };
1382
- var _tables;
3067
+ var __privateSet$2 = (obj, member, value, setter) => {
3068
+ __accessCheck$2(obj, member, "write to private field");
3069
+ setter ? setter.call(obj, value) : member.set(obj, value);
3070
+ return value;
3071
+ };
3072
+ var _tables, _schemaTables$1;
1383
3073
  class SchemaPlugin extends XataPlugin {
1384
- constructor(links, tableNames) {
3074
+ constructor(schemaTables) {
1385
3075
  super();
1386
- this.links = links;
1387
- this.tableNames = tableNames;
1388
3076
  __privateAdd$2(this, _tables, {});
1389
- }
1390
- build(options) {
1391
- const { getFetchProps } = options;
1392
- const links = this.links;
1393
- const db = new Proxy({}, {
1394
- get: (_target, table) => {
1395
- if (!isString(table))
1396
- throw new Error("Invalid table name");
1397
- if (!__privateGet$1(this, _tables)[table])
1398
- __privateGet$1(this, _tables)[table] = new RestRepository({ db, getFetchProps, table, links });
1399
- return __privateGet$1(this, _tables)[table];
3077
+ __privateAdd$2(this, _schemaTables$1, void 0);
3078
+ __privateSet$2(this, _schemaTables$1, schemaTables);
3079
+ }
3080
+ build(pluginOptions) {
3081
+ const db = new Proxy(
3082
+ {},
3083
+ {
3084
+ get: (_target, table) => {
3085
+ if (!isString(table))
3086
+ throw new Error("Invalid table name");
3087
+ if (__privateGet$2(this, _tables)[table] === void 0) {
3088
+ __privateGet$2(this, _tables)[table] = new RestRepository({ db, pluginOptions, table, schemaTables: __privateGet$2(this, _schemaTables$1) });
3089
+ }
3090
+ return __privateGet$2(this, _tables)[table];
3091
+ }
1400
3092
  }
1401
- });
1402
- for (const table of this.tableNames ?? []) {
1403
- db[table] = new RestRepository({ db, getFetchProps, table, links });
3093
+ );
3094
+ const tableNames = __privateGet$2(this, _schemaTables$1)?.map(({ name }) => name) ?? [];
3095
+ for (const table of tableNames) {
3096
+ db[table] = new RestRepository({ db, pluginOptions, table, schemaTables: __privateGet$2(this, _schemaTables$1) });
1404
3097
  }
1405
3098
  return db;
1406
3099
  }
1407
3100
  }
1408
3101
  _tables = new WeakMap();
3102
+ _schemaTables$1 = new WeakMap();
1409
3103
 
1410
3104
  var __accessCheck$1 = (obj, member, msg) => {
1411
3105
  if (!member.has(obj))
1412
3106
  throw TypeError("Cannot " + msg);
1413
3107
  };
3108
+ var __privateGet$1 = (obj, member, getter) => {
3109
+ __accessCheck$1(obj, member, "read from private field");
3110
+ return getter ? getter.call(obj) : member.get(obj);
3111
+ };
1414
3112
  var __privateAdd$1 = (obj, member, value) => {
1415
3113
  if (member.has(obj))
1416
3114
  throw TypeError("Cannot add the same private member more than once");
1417
3115
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
1418
3116
  };
3117
+ var __privateSet$1 = (obj, member, value, setter) => {
3118
+ __accessCheck$1(obj, member, "write to private field");
3119
+ setter ? setter.call(obj, value) : member.set(obj, value);
3120
+ return value;
3121
+ };
1419
3122
  var __privateMethod$1 = (obj, member, method) => {
1420
3123
  __accessCheck$1(obj, member, "access private method");
1421
3124
  return method;
1422
3125
  };
1423
- var _search, search_fn;
3126
+ var _schemaTables, _search, search_fn, _getSchemaTables, getSchemaTables_fn;
1424
3127
  class SearchPlugin extends XataPlugin {
1425
- constructor(db, links) {
3128
+ constructor(db, schemaTables) {
1426
3129
  super();
1427
3130
  this.db = db;
1428
- this.links = links;
1429
3131
  __privateAdd$1(this, _search);
3132
+ __privateAdd$1(this, _getSchemaTables);
3133
+ __privateAdd$1(this, _schemaTables, void 0);
3134
+ __privateSet$1(this, _schemaTables, schemaTables);
1430
3135
  }
1431
3136
  build({ getFetchProps }) {
1432
3137
  return {
1433
3138
  all: async (query, options = {}) => {
1434
3139
  const records = await __privateMethod$1(this, _search, search_fn).call(this, query, options, getFetchProps);
3140
+ const schemaTables = await __privateMethod$1(this, _getSchemaTables, getSchemaTables_fn).call(this, getFetchProps);
1435
3141
  return records.map((record) => {
1436
3142
  const { table = "orphan" } = record.xata;
1437
- return { table, record: initObject(this.db, this.links, table, record) };
3143
+ return { table, record: initObject(this.db, schemaTables, table, record, ["*"]) };
1438
3144
  });
1439
3145
  },
1440
3146
  byTable: async (query, options = {}) => {
1441
3147
  const records = await __privateMethod$1(this, _search, search_fn).call(this, query, options, getFetchProps);
3148
+ const schemaTables = await __privateMethod$1(this, _getSchemaTables, getSchemaTables_fn).call(this, getFetchProps);
1442
3149
  return records.reduce((acc, record) => {
1443
3150
  const { table = "orphan" } = record.xata;
1444
3151
  const items = acc[table] ?? [];
1445
- const item = initObject(this.db, this.links, table, record);
3152
+ const item = initObject(this.db, schemaTables, table, record, ["*"]);
1446
3153
  return { ...acc, [table]: [...items, item] };
1447
3154
  }, {});
1448
3155
  }
1449
3156
  };
1450
3157
  }
1451
3158
  }
3159
+ _schemaTables = new WeakMap();
1452
3160
  _search = new WeakSet();
1453
3161
  search_fn = async function(query, options, getFetchProps) {
1454
3162
  const fetchProps = await getFetchProps();
1455
- const { tables, fuzziness } = options ?? {};
3163
+ const { tables, fuzziness, highlight, prefix, page } = options ?? {};
1456
3164
  const { records } = await searchBranch({
1457
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}" },
1458
- body: { tables, query, fuzziness },
3165
+ pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", region: "{region}" },
3166
+ body: { tables, query, fuzziness, prefix, highlight, page },
1459
3167
  ...fetchProps
1460
3168
  });
1461
3169
  return records;
1462
3170
  };
3171
+ _getSchemaTables = new WeakSet();
3172
+ getSchemaTables_fn = async function(getFetchProps) {
3173
+ if (__privateGet$1(this, _schemaTables))
3174
+ return __privateGet$1(this, _schemaTables);
3175
+ const fetchProps = await getFetchProps();
3176
+ const { schema } = await getBranchDetails({
3177
+ pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", region: "{region}" },
3178
+ ...fetchProps
3179
+ });
3180
+ __privateSet$1(this, _schemaTables, schema.tables);
3181
+ return schema.tables;
3182
+ };
3183
+
3184
+ class TransactionPlugin extends XataPlugin {
3185
+ build({ getFetchProps }) {
3186
+ return {
3187
+ run: async (operations) => {
3188
+ const fetchProps = await getFetchProps();
3189
+ const response = await branchTransaction({
3190
+ pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", region: "{region}" },
3191
+ body: { operations },
3192
+ ...fetchProps
3193
+ });
3194
+ return response;
3195
+ }
3196
+ };
3197
+ }
3198
+ }
1463
3199
 
1464
3200
  const isBranchStrategyBuilder = (strategy) => {
1465
3201
  return typeof strategy === "function";
1466
3202
  };
1467
3203
 
1468
- const envBranchNames = [
1469
- "XATA_BRANCH",
1470
- "VERCEL_GIT_COMMIT_REF",
1471
- "CF_PAGES_BRANCH",
1472
- "BRANCH"
1473
- ];
1474
- const defaultBranch = "main";
1475
3204
  async function getCurrentBranchName(options) {
1476
- const env = await getBranchByEnvVariable();
1477
- if (env)
1478
- return env;
1479
- const branch = await getGitBranch();
1480
- if (!branch)
1481
- return defaultBranch;
1482
- const details = await getDatabaseBranch(branch, options);
1483
- if (details)
3205
+ const { branch, envBranch } = getEnvironment();
3206
+ if (branch)
1484
3207
  return branch;
1485
- return defaultBranch;
3208
+ const gitBranch = envBranch || await getGitBranch();
3209
+ return resolveXataBranch(gitBranch, options);
1486
3210
  }
1487
3211
  async function getCurrentBranchDetails(options) {
1488
- const env = await getBranchByEnvVariable();
1489
- if (env)
1490
- return getDatabaseBranch(env, options);
1491
- const branch = await getGitBranch();
1492
- if (!branch)
1493
- return getDatabaseBranch(defaultBranch, options);
1494
- const details = await getDatabaseBranch(branch, options);
1495
- if (details)
1496
- return details;
1497
- return getDatabaseBranch(defaultBranch, options);
3212
+ const branch = await getCurrentBranchName(options);
3213
+ return getDatabaseBranch(branch, options);
3214
+ }
3215
+ async function resolveXataBranch(gitBranch, options) {
3216
+ const databaseURL = options?.databaseURL || getDatabaseURL();
3217
+ const apiKey = options?.apiKey || getAPIKey();
3218
+ if (!databaseURL)
3219
+ throw new Error(
3220
+ "A databaseURL was not defined. Either set the XATA_DATABASE_URL env variable or pass the argument explicitely"
3221
+ );
3222
+ if (!apiKey)
3223
+ throw new Error(
3224
+ "An API key was not defined. Either set the XATA_API_KEY env variable or pass the argument explicitely"
3225
+ );
3226
+ const [protocol, , host, , dbName] = databaseURL.split("/");
3227
+ const urlParts = parseWorkspacesUrlParts(host);
3228
+ if (!urlParts)
3229
+ throw new Error(`Unable to parse workspace and region: ${databaseURL}`);
3230
+ const { workspace, region } = urlParts;
3231
+ const { fallbackBranch } = getEnvironment();
3232
+ const { branch } = await resolveBranch({
3233
+ apiKey,
3234
+ apiUrl: databaseURL,
3235
+ fetchImpl: getFetchImplementation(options?.fetchImpl),
3236
+ workspacesApiUrl: `${protocol}//${host}`,
3237
+ pathParams: { dbName, workspace, region },
3238
+ queryParams: { gitBranch, fallbackBranch },
3239
+ trace: defaultTrace,
3240
+ clientName: options?.clientName
3241
+ });
3242
+ return branch;
1498
3243
  }
1499
3244
  async function getDatabaseBranch(branch, options) {
1500
3245
  const databaseURL = options?.databaseURL || getDatabaseURL();
1501
3246
  const apiKey = options?.apiKey || getAPIKey();
1502
3247
  if (!databaseURL)
1503
- throw new Error("A databaseURL was not defined. Either set the XATA_DATABASE_URL env variable or pass the argument explicitely");
3248
+ throw new Error(
3249
+ "A databaseURL was not defined. Either set the XATA_DATABASE_URL env variable or pass the argument explicitely"
3250
+ );
1504
3251
  if (!apiKey)
1505
- throw new Error("An API key was not defined. Either set the XATA_API_KEY env variable or pass the argument explicitely");
3252
+ throw new Error(
3253
+ "An API key was not defined. Either set the XATA_API_KEY env variable or pass the argument explicitely"
3254
+ );
1506
3255
  const [protocol, , host, , database] = databaseURL.split("/");
1507
- const [workspace] = host.split(".");
1508
- const dbBranchName = `${database}:${branch}`;
3256
+ const urlParts = parseWorkspacesUrlParts(host);
3257
+ if (!urlParts)
3258
+ throw new Error(`Unable to parse workspace and region: ${databaseURL}`);
3259
+ const { workspace, region } = urlParts;
1509
3260
  try {
1510
3261
  return await getBranchDetails({
1511
3262
  apiKey,
1512
3263
  apiUrl: databaseURL,
1513
3264
  fetchImpl: getFetchImplementation(options?.fetchImpl),
1514
3265
  workspacesApiUrl: `${protocol}//${host}`,
1515
- pathParams: {
1516
- dbBranchName,
1517
- workspace
1518
- }
3266
+ pathParams: { dbBranchName: `${database}:${branch}`, workspace, region },
3267
+ trace: defaultTrace
1519
3268
  });
1520
3269
  } catch (err) {
1521
3270
  if (isObject(err) && err.status === 404)
@@ -1523,21 +3272,10 @@ async function getDatabaseBranch(branch, options) {
1523
3272
  throw err;
1524
3273
  }
1525
3274
  }
1526
- function getBranchByEnvVariable() {
1527
- for (const name of envBranchNames) {
1528
- const value = getEnvVariable(name);
1529
- if (value) {
1530
- return value;
1531
- }
1532
- }
1533
- try {
1534
- return XATA_BRANCH;
1535
- } catch (err) {
1536
- }
1537
- }
1538
3275
  function getDatabaseURL() {
1539
3276
  try {
1540
- return getEnvVariable("XATA_DATABASE_URL") ?? XATA_DATABASE_URL;
3277
+ const { databaseURL } = getEnvironment();
3278
+ return databaseURL;
1541
3279
  } catch (err) {
1542
3280
  return void 0;
1543
3281
  }
@@ -1566,24 +3304,31 @@ var __privateMethod = (obj, member, method) => {
1566
3304
  return method;
1567
3305
  };
1568
3306
  const buildClient = (plugins) => {
1569
- var _branch, _parseOptions, parseOptions_fn, _getFetchProps, getFetchProps_fn, _evaluateBranch, evaluateBranch_fn, _a;
3307
+ var _branch, _options, _parseOptions, parseOptions_fn, _getFetchProps, getFetchProps_fn, _evaluateBranch, evaluateBranch_fn, _a;
1570
3308
  return _a = class {
1571
- constructor(options = {}, links, tables) {
3309
+ constructor(options = {}, schemaTables) {
1572
3310
  __privateAdd(this, _parseOptions);
1573
3311
  __privateAdd(this, _getFetchProps);
1574
3312
  __privateAdd(this, _evaluateBranch);
1575
3313
  __privateAdd(this, _branch, void 0);
3314
+ __privateAdd(this, _options, void 0);
1576
3315
  const safeOptions = __privateMethod(this, _parseOptions, parseOptions_fn).call(this, options);
1577
- const db = new SchemaPlugin(links, tables).build({ getFetchProps: () => __privateMethod(this, _getFetchProps, getFetchProps_fn).call(this, safeOptions) });
1578
- const search = new SearchPlugin(db, links ?? {}).build({
1579
- getFetchProps: () => __privateMethod(this, _getFetchProps, getFetchProps_fn).call(this, safeOptions)
1580
- });
3316
+ __privateSet(this, _options, safeOptions);
3317
+ const pluginOptions = {
3318
+ getFetchProps: () => __privateMethod(this, _getFetchProps, getFetchProps_fn).call(this, safeOptions),
3319
+ cache: safeOptions.cache,
3320
+ trace: safeOptions.trace
3321
+ };
3322
+ const db = new SchemaPlugin(schemaTables).build(pluginOptions);
3323
+ const search = new SearchPlugin(db, schemaTables).build(pluginOptions);
3324
+ const transactions = new TransactionPlugin().build(pluginOptions);
1581
3325
  this.db = db;
1582
3326
  this.search = search;
3327
+ this.transactions = transactions;
1583
3328
  for (const [key, namespace] of Object.entries(plugins ?? {})) {
1584
- if (!namespace)
3329
+ if (namespace === void 0)
1585
3330
  continue;
1586
- const result = namespace.build({ getFetchProps: () => __privateMethod(this, _getFetchProps, getFetchProps_fn).call(this, safeOptions) });
3331
+ const result = namespace.build(pluginOptions);
1587
3332
  if (result instanceof Promise) {
1588
3333
  void result.then((namespace2) => {
1589
3334
  this[key] = namespace2;
@@ -1593,20 +3338,46 @@ const buildClient = (plugins) => {
1593
3338
  }
1594
3339
  }
1595
3340
  }
1596
- }, _branch = new WeakMap(), _parseOptions = new WeakSet(), parseOptions_fn = function(options) {
3341
+ async getConfig() {
3342
+ const databaseURL = __privateGet(this, _options).databaseURL;
3343
+ const branch = await __privateGet(this, _options).branch();
3344
+ return { databaseURL, branch };
3345
+ }
3346
+ }, _branch = new WeakMap(), _options = new WeakMap(), _parseOptions = new WeakSet(), parseOptions_fn = function(options) {
3347
+ const enableBrowser = options?.enableBrowser ?? getEnableBrowserVariable() ?? false;
3348
+ const isBrowser = typeof window !== "undefined" && typeof Deno === "undefined";
3349
+ if (isBrowser && !enableBrowser) {
3350
+ throw new Error(
3351
+ "You are trying to use Xata from the browser, which is potentially a non-secure environment. If you understand the security concerns, such as leaking your credentials, pass `enableBrowser: true` to the client options to remove this error."
3352
+ );
3353
+ }
1597
3354
  const fetch = getFetchImplementation(options?.fetch);
1598
3355
  const databaseURL = options?.databaseURL || getDatabaseURL();
1599
3356
  const apiKey = options?.apiKey || getAPIKey();
1600
- const branch = async () => options?.branch ? await __privateMethod(this, _evaluateBranch, evaluateBranch_fn).call(this, options.branch) : await getCurrentBranchName({ apiKey, databaseURL, fetchImpl: options?.fetch });
1601
- if (!databaseURL || !apiKey) {
1602
- throw new Error("Options databaseURL and apiKey are required");
3357
+ const cache = options?.cache ?? new SimpleCache({ defaultQueryTTL: 0 });
3358
+ const trace = options?.trace ?? defaultTrace;
3359
+ const clientName = options?.clientName;
3360
+ const branch = async () => options?.branch !== void 0 ? await __privateMethod(this, _evaluateBranch, evaluateBranch_fn).call(this, options.branch) : await getCurrentBranchName({
3361
+ apiKey,
3362
+ databaseURL,
3363
+ fetchImpl: options?.fetch,
3364
+ clientName: options?.clientName
3365
+ });
3366
+ if (!apiKey) {
3367
+ throw new Error("Option apiKey is required");
1603
3368
  }
1604
- return { fetch, databaseURL, apiKey, branch };
3369
+ if (!databaseURL) {
3370
+ throw new Error("Option databaseURL is required");
3371
+ }
3372
+ return { fetch, databaseURL, apiKey, branch, cache, trace, clientID: generateUUID(), enableBrowser, clientName };
1605
3373
  }, _getFetchProps = new WeakSet(), getFetchProps_fn = async function({
1606
3374
  fetch,
1607
3375
  apiKey,
1608
3376
  databaseURL,
1609
- branch
3377
+ branch,
3378
+ trace,
3379
+ clientID,
3380
+ clientName
1610
3381
  }) {
1611
3382
  const branchValue = await __privateMethod(this, _evaluateBranch, evaluateBranch_fn).call(this, branch);
1612
3383
  if (!branchValue)
@@ -1617,14 +3388,17 @@ const buildClient = (plugins) => {
1617
3388
  apiUrl: "",
1618
3389
  workspacesApiUrl: (path, params) => {
1619
3390
  const hasBranch = params.dbBranchName ?? params.branch;
1620
- const newPath = path.replace(/^\/db\/[^/]+/, hasBranch ? `:${branchValue}` : "");
3391
+ const newPath = path.replace(/^\/db\/[^/]+/, hasBranch !== void 0 ? `:${branchValue}` : "");
1621
3392
  return databaseURL + newPath;
1622
- }
3393
+ },
3394
+ trace,
3395
+ clientID,
3396
+ clientName
1623
3397
  };
1624
3398
  }, _evaluateBranch = new WeakSet(), evaluateBranch_fn = async function(param) {
1625
3399
  if (__privateGet(this, _branch))
1626
3400
  return __privateGet(this, _branch);
1627
- if (!param)
3401
+ if (param === void 0)
1628
3402
  return void 0;
1629
3403
  const strategies = Array.isArray(param) ? [...param] : [param];
1630
3404
  const evaluateBranch = async (strategy) => {
@@ -1642,6 +3416,88 @@ const buildClient = (plugins) => {
1642
3416
  class BaseClient extends buildClient() {
1643
3417
  }
1644
3418
 
3419
+ const META = "__";
3420
+ const VALUE = "___";
3421
+ class Serializer {
3422
+ constructor() {
3423
+ this.classes = {};
3424
+ }
3425
+ add(clazz) {
3426
+ this.classes[clazz.name] = clazz;
3427
+ }
3428
+ toJSON(data) {
3429
+ function visit(obj) {
3430
+ if (Array.isArray(obj))
3431
+ return obj.map(visit);
3432
+ const type = typeof obj;
3433
+ if (type === "undefined")
3434
+ return { [META]: "undefined" };
3435
+ if (type === "bigint")
3436
+ return { [META]: "bigint", [VALUE]: obj.toString() };
3437
+ if (obj === null || type !== "object")
3438
+ return obj;
3439
+ const constructor = obj.constructor;
3440
+ const o = { [META]: constructor.name };
3441
+ for (const [key, value] of Object.entries(obj)) {
3442
+ o[key] = visit(value);
3443
+ }
3444
+ if (constructor === Date)
3445
+ o[VALUE] = obj.toISOString();
3446
+ if (constructor === Map)
3447
+ o[VALUE] = Object.fromEntries(obj);
3448
+ if (constructor === Set)
3449
+ o[VALUE] = [...obj];
3450
+ return o;
3451
+ }
3452
+ return JSON.stringify(visit(data));
3453
+ }
3454
+ fromJSON(json) {
3455
+ return JSON.parse(json, (key, value) => {
3456
+ if (value && typeof value === "object" && !Array.isArray(value)) {
3457
+ const { [META]: clazz, [VALUE]: val, ...rest } = value;
3458
+ const constructor = this.classes[clazz];
3459
+ if (constructor) {
3460
+ return Object.assign(Object.create(constructor.prototype), rest);
3461
+ }
3462
+ if (clazz === "Date")
3463
+ return new Date(val);
3464
+ if (clazz === "Set")
3465
+ return new Set(val);
3466
+ if (clazz === "Map")
3467
+ return new Map(Object.entries(val));
3468
+ if (clazz === "bigint")
3469
+ return BigInt(val);
3470
+ if (clazz === "undefined")
3471
+ return void 0;
3472
+ return rest;
3473
+ }
3474
+ return value;
3475
+ });
3476
+ }
3477
+ }
3478
+ const defaultSerializer = new Serializer();
3479
+ const serialize = (data) => {
3480
+ return defaultSerializer.toJSON(data);
3481
+ };
3482
+ const deserialize = (json) => {
3483
+ return defaultSerializer.fromJSON(json);
3484
+ };
3485
+
3486
+ function buildWorkerRunner(config) {
3487
+ return function xataWorker(name, worker) {
3488
+ return async (...args) => {
3489
+ const url = process.env.NODE_ENV === "development" ? `http://localhost:64749/${name}` : `https://dispatcher.xata.workers.dev/${config.workspace}/${config.worker}/${name}`;
3490
+ const result = await fetch(url, {
3491
+ method: "POST",
3492
+ headers: { "Content-Type": "application/json" },
3493
+ body: serialize({ args })
3494
+ });
3495
+ const text = await result.text();
3496
+ return deserialize(text);
3497
+ };
3498
+ };
3499
+ }
3500
+
1645
3501
  class XataError extends Error {
1646
3502
  constructor(message, status) {
1647
3503
  super(message);
@@ -1649,5 +3505,5 @@ class XataError extends Error {
1649
3505
  }
1650
3506
  }
1651
3507
 
1652
- export { BaseClient, operationsByTag as Operations, PAGINATION_DEFAULT_OFFSET, PAGINATION_DEFAULT_SIZE, PAGINATION_MAX_OFFSET, PAGINATION_MAX_SIZE, Page, Query, Repository, RestRepository, SchemaPlugin, SearchPlugin, XataApiClient, XataApiPlugin, XataError, XataPlugin, acceptWorkspaceMemberInvite, addTableColumn, buildClient, bulkInsertTableRecords, cancelWorkspaceMemberInvite, contains, createBranch, createDatabase, createTable, createUserAPIKey, createWorkspace, deleteBranch, deleteColumn, deleteDatabase, deleteRecord, deleteTable, deleteUser, deleteUserAPIKey, deleteWorkspace, endsWith, executeBranchMigrationPlan, exists, ge, getAPIKey, getBranchDetails, getBranchList, getBranchMetadata, getBranchMigrationHistory, getBranchMigrationPlan, getBranchStats, getColumn, getCurrentBranchDetails, getCurrentBranchName, getDatabaseList, getDatabaseURL, getRecord, getTableColumns, getTableSchema, getUser, getUserAPIKeys, getWorkspace, getWorkspaceMembersList, getWorkspacesList, gt, gte, includes, includesAll, includesAny, includesNone, insertRecord, insertRecordWithID, inviteWorkspaceMember, is, isIdentifiable, isNot, isXataRecord, le, lt, lte, notExists, operationsByTag, pattern, queryTable, removeWorkspaceMember, resendWorkspaceMemberInvite, searchBranch, setTableSchema, startsWith, updateBranchMetadata, updateColumn, updateRecordWithID, updateTable, updateUser, updateWorkspace, updateWorkspaceMemberRole, upsertRecordWithID };
3508
+ export { BaseClient, FetcherError, operationsByTag as Operations, PAGINATION_DEFAULT_OFFSET, PAGINATION_DEFAULT_SIZE, PAGINATION_MAX_OFFSET, PAGINATION_MAX_SIZE, Page, Query, RecordArray, Repository, RestRepository, SchemaPlugin, SearchPlugin, Serializer, SimpleCache, XataApiClient, XataApiPlugin, XataError, XataPlugin, acceptWorkspaceMemberInvite, addGitBranchesEntry, addTableColumn, aggregateTable, applyBranchSchemaEdit, branchTransaction, buildClient, buildWorkerRunner, bulkInsertTableRecords, cancelWorkspaceMemberInvite, compareBranchSchemas, compareBranchWithUserSchema, compareMigrationRequest, contains, createBranch, createDatabase, createMigrationRequest, createTable, createUserAPIKey, createWorkspace, deleteBranch, deleteColumn, deleteDatabase, deleteRecord, deleteTable, deleteUser, deleteUserAPIKey, deleteWorkspace, deserialize, endsWith, equals, executeBranchMigrationPlan, exists, ge, getAPIKey, getBranchDetails, getBranchList, getBranchMetadata, getBranchMigrationHistory, getBranchMigrationPlan, getBranchSchemaHistory, getBranchStats, getColumn, getCurrentBranchDetails, getCurrentBranchName, getDatabaseList, getDatabaseMetadata, getDatabaseURL, getGitBranchesMapping, getHostUrl, getMigrationRequest, getMigrationRequestIsMerged, getRecord, getTableColumns, getTableSchema, getUser, getUserAPIKeys, getWorkspace, getWorkspaceMembersList, getWorkspacesList, greaterEquals, greaterThan, greaterThanEquals, gt, gte, includes, includesAll, includesAny, includesNone, insertRecord, insertRecordWithID, inviteWorkspaceMember, is, isCursorPaginationOptions, isHostProviderAlias, isHostProviderBuilder, isIdentifiable, isNot, isXataRecord, le, lessEquals, lessThan, lessThanEquals, listMigrationRequestsCommits, listRegions, lt, lte, mergeMigrationRequest, notExists, operationsByTag, parseProviderString, parseWorkspacesUrlParts, pattern, previewBranchSchemaEdit, queryMigrationRequests, queryTable, removeGitBranchesEntry, removeWorkspaceMember, resendWorkspaceMemberInvite, resolveBranch, searchBranch, searchTable, serialize, setTableSchema, startsWith, summarizeTable, updateBranchMetadata, updateBranchSchema, updateColumn, updateDatabaseMetadata, updateMigrationRequest, updateRecordWithID, updateTable, updateUser, updateWorkspace, updateWorkspaceMemberInvite, updateWorkspaceMemberRole, upsertRecordWithID };
1653
3509
  //# sourceMappingURL=index.mjs.map