@xata.io/client 0.0.0-alpha.vf6f2567 → 0.0.0-alpha.vf721f5c

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.cjs CHANGED
@@ -2,6 +2,46 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
+ function _interopNamespace(e) {
6
+ if (e && e.__esModule) return e;
7
+ var n = Object.create(null);
8
+ if (e) {
9
+ Object.keys(e).forEach(function (k) {
10
+ if (k !== 'default') {
11
+ var d = Object.getOwnPropertyDescriptor(e, k);
12
+ Object.defineProperty(n, k, d.get ? d : {
13
+ enumerable: true,
14
+ get: function () { return e[k]; }
15
+ });
16
+ }
17
+ });
18
+ }
19
+ n["default"] = e;
20
+ return Object.freeze(n);
21
+ }
22
+
23
+ const defaultTrace = async (_name, fn, _options) => {
24
+ return await fn({
25
+ setAttributes: () => {
26
+ return;
27
+ }
28
+ });
29
+ };
30
+ const TraceAttributes = {
31
+ KIND: "xata.trace.kind",
32
+ VERSION: "xata.sdk.version",
33
+ TABLE: "xata.table",
34
+ HTTP_REQUEST_ID: "http.request_id",
35
+ HTTP_STATUS_CODE: "http.status_code",
36
+ HTTP_HOST: "http.host",
37
+ HTTP_SCHEME: "http.scheme",
38
+ HTTP_USER_AGENT: "http.user_agent",
39
+ HTTP_METHOD: "http.method",
40
+ HTTP_URL: "http.url",
41
+ HTTP_ROUTE: "http.route",
42
+ HTTP_TARGET: "http.target"
43
+ };
44
+
5
45
  function notEmpty(value) {
6
46
  return value !== null && value !== void 0;
7
47
  }
@@ -11,43 +51,101 @@ function compact(arr) {
11
51
  function isObject(value) {
12
52
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
13
53
  }
54
+ function isDefined(value) {
55
+ return value !== null && value !== void 0;
56
+ }
14
57
  function isString(value) {
15
- return value !== void 0 && value !== null && typeof value === "string";
58
+ return isDefined(value) && typeof value === "string";
59
+ }
60
+ function isStringArray(value) {
61
+ return isDefined(value) && Array.isArray(value) && value.every(isString);
16
62
  }
17
63
  function toBase64(value) {
18
64
  try {
19
65
  return btoa(value);
20
66
  } catch (err) {
21
- return Buffer.from(value).toString("base64");
67
+ const buf = Buffer;
68
+ return buf.from(value).toString("base64");
22
69
  }
23
70
  }
24
71
 
25
- function getEnvVariable(name) {
72
+ function getEnvironment() {
26
73
  try {
27
- if (isObject(process) && isString(process?.env?.[name])) {
28
- return process.env[name];
74
+ if (isObject(process) && isObject(process.env)) {
75
+ return {
76
+ apiKey: process.env.XATA_API_KEY ?? getGlobalApiKey(),
77
+ databaseURL: process.env.XATA_DATABASE_URL ?? getGlobalDatabaseURL(),
78
+ branch: process.env.XATA_BRANCH ?? getGlobalBranch(),
79
+ envBranch: process.env.VERCEL_GIT_COMMIT_REF ?? process.env.CF_PAGES_BRANCH ?? process.env.BRANCH,
80
+ fallbackBranch: process.env.XATA_FALLBACK_BRANCH ?? getGlobalFallbackBranch()
81
+ };
29
82
  }
30
83
  } catch (err) {
31
84
  }
32
85
  try {
33
- if (isObject(Deno) && isString(Deno?.env?.get(name))) {
34
- return Deno.env.get(name);
86
+ if (isObject(Deno) && isObject(Deno.env)) {
87
+ return {
88
+ apiKey: Deno.env.get("XATA_API_KEY") ?? getGlobalApiKey(),
89
+ databaseURL: Deno.env.get("XATA_DATABASE_URL") ?? getGlobalDatabaseURL(),
90
+ branch: Deno.env.get("XATA_BRANCH") ?? getGlobalBranch(),
91
+ envBranch: Deno.env.get("VERCEL_GIT_COMMIT_REF") ?? Deno.env.get("CF_PAGES_BRANCH") ?? Deno.env.get("BRANCH"),
92
+ fallbackBranch: Deno.env.get("XATA_FALLBACK_BRANCH") ?? getGlobalFallbackBranch()
93
+ };
35
94
  }
36
95
  } catch (err) {
37
96
  }
97
+ return {
98
+ apiKey: getGlobalApiKey(),
99
+ databaseURL: getGlobalDatabaseURL(),
100
+ branch: getGlobalBranch(),
101
+ envBranch: void 0,
102
+ fallbackBranch: getGlobalFallbackBranch()
103
+ };
104
+ }
105
+ function getGlobalApiKey() {
106
+ try {
107
+ return XATA_API_KEY;
108
+ } catch (err) {
109
+ return void 0;
110
+ }
111
+ }
112
+ function getGlobalDatabaseURL() {
113
+ try {
114
+ return XATA_DATABASE_URL;
115
+ } catch (err) {
116
+ return void 0;
117
+ }
118
+ }
119
+ function getGlobalBranch() {
120
+ try {
121
+ return XATA_BRANCH;
122
+ } catch (err) {
123
+ return void 0;
124
+ }
125
+ }
126
+ function getGlobalFallbackBranch() {
127
+ try {
128
+ return XATA_FALLBACK_BRANCH;
129
+ } catch (err) {
130
+ return void 0;
131
+ }
38
132
  }
39
133
  async function getGitBranch() {
134
+ const cmd = ["git", "branch", "--show-current"];
135
+ const fullCmd = cmd.join(" ");
136
+ const nodeModule = ["child", "process"].join("_");
137
+ const execOptions = { encoding: "utf-8", stdio: ["ignore", "pipe", "ignore"] };
40
138
  try {
41
- return require("child_process").execSync("git branch --show-current", { encoding: "utf-8" }).trim();
139
+ if (typeof require === "function") {
140
+ return require(nodeModule).execSync(fullCmd, execOptions).trim();
141
+ }
142
+ const { execSync } = await (function (t) { return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require(t)); }); })(nodeModule);
143
+ return execSync(fullCmd, execOptions).toString().trim();
42
144
  } catch (err) {
43
145
  }
44
146
  try {
45
147
  if (isObject(Deno)) {
46
- const process2 = Deno.run({
47
- cmd: ["git", "branch", "--show-current"],
48
- stdout: "piped",
49
- stderr: "piped"
50
- });
148
+ const process2 = Deno.run({ cmd, stdout: "piped", stderr: "null" });
51
149
  return new TextDecoder().decode(await process2.output()).trim();
52
150
  }
53
151
  } catch (err) {
@@ -56,7 +154,8 @@ async function getGitBranch() {
56
154
 
57
155
  function getAPIKey() {
58
156
  try {
59
- return getEnvVariable("XATA_API_KEY") ?? XATA_API_KEY;
157
+ const { apiKey } = getEnvironment();
158
+ return apiKey;
60
159
  } catch (err) {
61
160
  return void 0;
62
161
  }
@@ -66,21 +165,35 @@ function getFetchImplementation(userFetch) {
66
165
  const globalFetch = typeof fetch !== "undefined" ? fetch : void 0;
67
166
  const fetchImpl = userFetch ?? globalFetch;
68
167
  if (!fetchImpl) {
69
- throw new Error(`The \`fetch\` option passed to the Xata client is resolving to a falsy value and may not be correctly imported.`);
168
+ throw new Error(
169
+ `Couldn't find \`fetch\`. Install a fetch implementation such as \`node-fetch\` and pass it explicitly.`
170
+ );
70
171
  }
71
172
  return fetchImpl;
72
173
  }
73
174
 
74
- class FetcherError extends Error {
75
- constructor(status, data) {
175
+ const VERSION = "0.0.0-alpha.vf721f5c";
176
+
177
+ class ErrorWithCause extends Error {
178
+ constructor(message, options) {
179
+ super(message, options);
180
+ }
181
+ }
182
+ class FetcherError extends ErrorWithCause {
183
+ constructor(status, data, requestId) {
76
184
  super(getMessage(data));
77
185
  this.status = status;
78
186
  this.errors = isBulkError(data) ? data.errors : void 0;
187
+ this.requestId = requestId;
79
188
  if (data instanceof Error) {
80
189
  this.stack = data.stack;
81
190
  this.cause = data.cause;
82
191
  }
83
192
  }
193
+ toString() {
194
+ const error = super.toString();
195
+ return `[${this.status}] (${this.requestId ?? "Unknown"}): ${error}`;
196
+ }
84
197
  }
85
198
  function isBulkError(error) {
86
199
  return isObject(error) && Array.isArray(error.errors);
@@ -103,9 +216,17 @@ function getMessage(data) {
103
216
  }
104
217
 
105
218
  const resolveUrl = (url, queryParams = {}, pathParams = {}) => {
106
- const query = new URLSearchParams(queryParams).toString();
219
+ const cleanQueryParams = Object.entries(queryParams).reduce((acc, [key, value]) => {
220
+ if (value === void 0 || value === null)
221
+ return acc;
222
+ return { ...acc, [key]: value };
223
+ }, {});
224
+ const query = new URLSearchParams(cleanQueryParams).toString();
107
225
  const queryString = query.length > 0 ? `?${query}` : "";
108
- return url.replace(/\{\w*\}/g, (key) => pathParams[key.slice(1, -1)]) + queryString;
226
+ const cleanPathParams = Object.entries(pathParams).reduce((acc, [key, value]) => {
227
+ return { ...acc, [key]: encodeURIComponent(String(value ?? "")).replace("%3A", ":") };
228
+ }, {});
229
+ return url.replace(/\{\w*\}/g, (key) => cleanPathParams[key.slice(1, -1)]) + queryString;
109
230
  };
110
231
  function buildBaseUrl({
111
232
  path,
@@ -113,10 +234,10 @@ function buildBaseUrl({
113
234
  apiUrl,
114
235
  pathParams
115
236
  }) {
116
- if (!pathParams?.workspace)
237
+ if (pathParams?.workspace === void 0)
117
238
  return `${apiUrl}${path}`;
118
239
  const url = typeof workspacesApiUrl === "string" ? `${workspacesApiUrl}${path}` : workspacesApiUrl(path, pathParams);
119
- return url.replace("{workspaceId}", pathParams.workspace);
240
+ return url.replace("{workspaceId}", String(pathParams.workspace));
120
241
  }
121
242
  function hostHeader(url) {
122
243
  const pattern = /.*:\/\/(?<host>[^/]+).*/;
@@ -133,32 +254,61 @@ async function fetch$1({
133
254
  fetchImpl,
134
255
  apiKey,
135
256
  apiUrl,
136
- workspacesApiUrl
257
+ workspacesApiUrl,
258
+ trace
137
259
  }) {
138
- const baseUrl = buildBaseUrl({ path, workspacesApiUrl, pathParams, apiUrl });
139
- const fullUrl = resolveUrl(baseUrl, queryParams, pathParams);
140
- const url = fullUrl.includes("localhost") ? fullUrl.replace(/^[^.]+\./, "http://") : fullUrl;
141
- const response = await fetchImpl(url, {
142
- method: method.toUpperCase(),
143
- body: body ? JSON.stringify(body) : void 0,
144
- headers: {
145
- "Content-Type": "application/json",
146
- ...headers,
147
- ...hostHeader(fullUrl),
148
- Authorization: `Bearer ${apiKey}`
149
- }
150
- });
151
- if (response.status === 204) {
152
- return {};
153
- }
260
+ return trace(
261
+ `${method.toUpperCase()} ${path}`,
262
+ async ({ setAttributes }) => {
263
+ const baseUrl = buildBaseUrl({ path, workspacesApiUrl, pathParams, apiUrl });
264
+ const fullUrl = resolveUrl(baseUrl, queryParams, pathParams);
265
+ const url = fullUrl.includes("localhost") ? fullUrl.replace(/^[^.]+\./, "http://") : fullUrl;
266
+ setAttributes({
267
+ [TraceAttributes.HTTP_URL]: url,
268
+ [TraceAttributes.HTTP_TARGET]: resolveUrl(path, queryParams, pathParams)
269
+ });
270
+ const response = await fetchImpl(url, {
271
+ method: method.toUpperCase(),
272
+ body: body ? JSON.stringify(body) : void 0,
273
+ headers: {
274
+ "Content-Type": "application/json",
275
+ "User-Agent": `Xata client-ts/${VERSION}`,
276
+ ...headers,
277
+ ...hostHeader(fullUrl),
278
+ Authorization: `Bearer ${apiKey}`
279
+ }
280
+ });
281
+ if (response.status === 204) {
282
+ return {};
283
+ }
284
+ const { host, protocol } = parseUrl(response.url);
285
+ const requestId = response.headers?.get("x-request-id") ?? void 0;
286
+ setAttributes({
287
+ [TraceAttributes.KIND]: "http",
288
+ [TraceAttributes.HTTP_REQUEST_ID]: requestId,
289
+ [TraceAttributes.HTTP_STATUS_CODE]: response.status,
290
+ [TraceAttributes.HTTP_HOST]: host,
291
+ [TraceAttributes.HTTP_SCHEME]: protocol?.replace(":", "")
292
+ });
293
+ try {
294
+ const jsonResponse = await response.json();
295
+ if (response.ok) {
296
+ return jsonResponse;
297
+ }
298
+ throw new FetcherError(response.status, jsonResponse, requestId);
299
+ } catch (error) {
300
+ throw new FetcherError(response.status, error, requestId);
301
+ }
302
+ },
303
+ { [TraceAttributes.HTTP_METHOD]: method.toUpperCase(), [TraceAttributes.HTTP_ROUTE]: path }
304
+ );
305
+ }
306
+ function parseUrl(url) {
154
307
  try {
155
- const jsonResponse = await response.json();
156
- if (response.ok) {
157
- return jsonResponse;
158
- }
159
- throw new FetcherError(response.status, jsonResponse);
308
+ const { host, protocol } = new URL(url);
309
+ return { host, protocol };
160
310
  } catch (error) {
161
- throw new FetcherError(response.status, error);
311
+ return {};
162
312
  }
163
313
  }
164
314
 
@@ -217,6 +367,7 @@ const removeWorkspaceMember = (variables) => fetch$1({
217
367
  ...variables
218
368
  });
219
369
  const inviteWorkspaceMember = (variables) => fetch$1({ url: "/workspaces/{workspaceId}/invites", method: "post", ...variables });
370
+ const updateWorkspaceMemberInvite = (variables) => fetch$1({ url: "/workspaces/{workspaceId}/invites/{inviteId}", method: "patch", ...variables });
220
371
  const cancelWorkspaceMemberInvite = (variables) => fetch$1({
221
372
  url: "/workspaces/{workspaceId}/invites/{inviteId}",
222
373
  method: "delete",
@@ -252,16 +403,42 @@ const deleteDatabase = (variables) => fetch$1({
252
403
  method: "delete",
253
404
  ...variables
254
405
  });
255
- const getBranchDetails = (variables) => fetch$1({
256
- url: "/db/{dbBranchName}",
406
+ const getDatabaseMetadata = (variables) => fetch$1({
407
+ url: "/dbs/{dbName}/metadata",
408
+ method: "get",
409
+ ...variables
410
+ });
411
+ const updateDatabaseMetadata = (variables) => fetch$1({ url: "/dbs/{dbName}/metadata", method: "patch", ...variables });
412
+ const getGitBranchesMapping = (variables) => fetch$1({ url: "/dbs/{dbName}/gitBranches", method: "get", ...variables });
413
+ const addGitBranchesEntry = (variables) => fetch$1({ url: "/dbs/{dbName}/gitBranches", method: "post", ...variables });
414
+ const removeGitBranchesEntry = (variables) => fetch$1({ url: "/dbs/{dbName}/gitBranches", method: "delete", ...variables });
415
+ const resolveBranch = (variables) => fetch$1({
416
+ url: "/dbs/{dbName}/resolveBranch",
417
+ method: "get",
418
+ ...variables
419
+ });
420
+ const listMigrationRequests = (variables) => fetch$1({ url: "/dbs/{dbName}/migrations/list", method: "post", ...variables });
421
+ const createMigrationRequest = (variables) => fetch$1({ url: "/dbs/{dbName}/migrations", method: "post", ...variables });
422
+ const getMigrationRequest = (variables) => fetch$1({
423
+ url: "/dbs/{dbName}/migrations/{mrNumber}",
257
424
  method: "get",
258
425
  ...variables
259
426
  });
260
- const createBranch = (variables) => fetch$1({
427
+ const updateMigrationRequest = (variables) => fetch$1({ url: "/dbs/{dbName}/migrations/{mrNumber}", method: "patch", ...variables });
428
+ const listMigrationRequestsCommits = (variables) => fetch$1({ url: "/dbs/{dbName}/migrations/{mrNumber}/commits", method: "post", ...variables });
429
+ const compareMigrationRequest = (variables) => fetch$1({ url: "/dbs/{dbName}/migrations/{mrNumber}/compare", method: "post", ...variables });
430
+ const getMigrationRequestIsMerged = (variables) => fetch$1({ url: "/dbs/{dbName}/migrations/{mrNumber}/merge", method: "get", ...variables });
431
+ const mergeMigrationRequest = (variables) => fetch$1({
432
+ url: "/dbs/{dbName}/migrations/{mrNumber}/merge",
433
+ method: "post",
434
+ ...variables
435
+ });
436
+ const getBranchDetails = (variables) => fetch$1({
261
437
  url: "/db/{dbBranchName}",
262
- method: "put",
438
+ method: "get",
263
439
  ...variables
264
440
  });
441
+ const createBranch = (variables) => fetch$1({ url: "/db/{dbBranchName}", method: "put", ...variables });
265
442
  const deleteBranch = (variables) => fetch$1({
266
443
  url: "/db/{dbBranchName}",
267
444
  method: "delete",
@@ -280,6 +457,16 @@ const getBranchMetadata = (variables) => fetch$1({
280
457
  const getBranchMigrationHistory = (variables) => fetch$1({ url: "/db/{dbBranchName}/migrations", method: "get", ...variables });
281
458
  const executeBranchMigrationPlan = (variables) => fetch$1({ url: "/db/{dbBranchName}/migrations/execute", method: "post", ...variables });
282
459
  const getBranchMigrationPlan = (variables) => fetch$1({ url: "/db/{dbBranchName}/migrations/plan", method: "post", ...variables });
460
+ const compareBranchWithUserSchema = (variables) => fetch$1({ url: "/db/{dbBranchName}/schema/compare", method: "post", ...variables });
461
+ const compareBranchSchemas = (variables) => fetch$1({ url: "/db/{dbBranchName}/schema/compare/{branchName}", method: "post", ...variables });
462
+ const updateBranchSchema = (variables) => fetch$1({
463
+ url: "/db/{dbBranchName}/schema/update",
464
+ method: "post",
465
+ ...variables
466
+ });
467
+ const previewBranchSchemaEdit = (variables) => fetch$1({ url: "/db/{dbBranchName}/schema/preview", method: "post", ...variables });
468
+ const applyBranchSchemaEdit = (variables) => fetch$1({ url: "/db/{dbBranchName}/schema/apply", method: "post", ...variables });
469
+ const getBranchSchemaHistory = (variables) => fetch$1({ url: "/db/{dbBranchName}/schema/history", method: "post", ...variables });
283
470
  const getBranchStats = (variables) => fetch$1({
284
471
  url: "/db/{dbBranchName}/stats",
285
472
  method: "get",
@@ -335,11 +522,7 @@ const updateColumn = (variables) => fetch$1({
335
522
  method: "patch",
336
523
  ...variables
337
524
  });
338
- const insertRecord = (variables) => fetch$1({
339
- url: "/db/{dbBranchName}/tables/{tableName}/data",
340
- method: "post",
341
- ...variables
342
- });
525
+ const insertRecord = (variables) => fetch$1({ url: "/db/{dbBranchName}/tables/{tableName}/data", method: "post", ...variables });
343
526
  const insertRecordWithID = (variables) => fetch$1({ url: "/db/{dbBranchName}/tables/{tableName}/data/{recordId}", method: "put", ...variables });
344
527
  const updateRecordWithID = (variables) => fetch$1({ url: "/db/{dbBranchName}/tables/{tableName}/data/{recordId}", method: "patch", ...variables });
345
528
  const upsertRecordWithID = (variables) => fetch$1({ url: "/db/{dbBranchName}/tables/{tableName}/data/{recordId}", method: "post", ...variables });
@@ -359,11 +542,21 @@ const queryTable = (variables) => fetch$1({
359
542
  method: "post",
360
543
  ...variables
361
544
  });
545
+ const searchTable = (variables) => fetch$1({
546
+ url: "/db/{dbBranchName}/tables/{tableName}/search",
547
+ method: "post",
548
+ ...variables
549
+ });
362
550
  const searchBranch = (variables) => fetch$1({
363
551
  url: "/db/{dbBranchName}/search",
364
552
  method: "post",
365
553
  ...variables
366
554
  });
555
+ const summarizeTable = (variables) => fetch$1({
556
+ url: "/db/{dbBranchName}/tables/{tableName}/summarize",
557
+ method: "post",
558
+ ...variables
559
+ });
367
560
  const operationsByTag = {
368
561
  users: { getUser, updateUser, deleteUser, getUserAPIKeys, createUserAPIKey, deleteUserAPIKey },
369
562
  workspaces: {
@@ -376,11 +569,22 @@ const operationsByTag = {
376
569
  updateWorkspaceMemberRole,
377
570
  removeWorkspaceMember,
378
571
  inviteWorkspaceMember,
572
+ updateWorkspaceMemberInvite,
379
573
  cancelWorkspaceMemberInvite,
380
574
  resendWorkspaceMemberInvite,
381
575
  acceptWorkspaceMemberInvite
382
576
  },
383
- database: { getDatabaseList, createDatabase, deleteDatabase },
577
+ database: {
578
+ getDatabaseList,
579
+ createDatabase,
580
+ deleteDatabase,
581
+ getDatabaseMetadata,
582
+ updateDatabaseMetadata,
583
+ getGitBranchesMapping,
584
+ addGitBranchesEntry,
585
+ removeGitBranchesEntry,
586
+ resolveBranch
587
+ },
384
588
  branch: {
385
589
  getBranchList,
386
590
  getBranchDetails,
@@ -388,10 +592,28 @@ const operationsByTag = {
388
592
  deleteBranch,
389
593
  updateBranchMetadata,
390
594
  getBranchMetadata,
595
+ getBranchStats
596
+ },
597
+ migrationRequests: {
598
+ listMigrationRequests,
599
+ createMigrationRequest,
600
+ getMigrationRequest,
601
+ updateMigrationRequest,
602
+ listMigrationRequestsCommits,
603
+ compareMigrationRequest,
604
+ getMigrationRequestIsMerged,
605
+ mergeMigrationRequest
606
+ },
607
+ branchSchema: {
391
608
  getBranchMigrationHistory,
392
609
  executeBranchMigrationPlan,
393
610
  getBranchMigrationPlan,
394
- getBranchStats
611
+ compareBranchWithUserSchema,
612
+ compareBranchSchemas,
613
+ updateBranchSchema,
614
+ previewBranchSchemaEdit,
615
+ applyBranchSchemaEdit,
616
+ getBranchSchemaHistory
395
617
  },
396
618
  table: {
397
619
  createTable,
@@ -414,14 +636,16 @@ const operationsByTag = {
414
636
  getRecord,
415
637
  bulkInsertTableRecords,
416
638
  queryTable,
417
- searchBranch
639
+ searchTable,
640
+ searchBranch,
641
+ summarizeTable
418
642
  }
419
643
  };
420
644
 
421
645
  function getHostUrl(provider, type) {
422
- if (isValidAlias(provider)) {
646
+ if (isHostProviderAlias(provider)) {
423
647
  return providers[provider][type];
424
- } else if (isValidBuilder(provider)) {
648
+ } else if (isHostProviderBuilder(provider)) {
425
649
  return provider[type];
426
650
  }
427
651
  throw new Error("Invalid API provider");
@@ -436,10 +660,10 @@ const providers = {
436
660
  workspaces: "https://{workspaceId}.staging.xatabase.co"
437
661
  }
438
662
  };
439
- function isValidAlias(alias) {
663
+ function isHostProviderAlias(alias) {
440
664
  return isString(alias) && Object.keys(providers).includes(alias);
441
665
  }
442
- function isValidBuilder(builder) {
666
+ function isHostProviderBuilder(builder) {
443
667
  return isObject(builder) && isString(builder.main) && isString(builder.workspaces);
444
668
  }
445
669
 
@@ -447,7 +671,7 @@ var __accessCheck$7 = (obj, member, msg) => {
447
671
  if (!member.has(obj))
448
672
  throw TypeError("Cannot " + msg);
449
673
  };
450
- var __privateGet$6 = (obj, member, getter) => {
674
+ var __privateGet$7 = (obj, member, getter) => {
451
675
  __accessCheck$7(obj, member, "read from private field");
452
676
  return getter ? getter.call(obj) : member.get(obj);
453
677
  };
@@ -456,7 +680,7 @@ var __privateAdd$7 = (obj, member, value) => {
456
680
  throw TypeError("Cannot add the same private member more than once");
457
681
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
458
682
  };
459
- var __privateSet$5 = (obj, member, value, setter) => {
683
+ var __privateSet$7 = (obj, member, value, setter) => {
460
684
  __accessCheck$7(obj, member, "write to private field");
461
685
  setter ? setter.call(obj, value) : member.set(obj, value);
462
686
  return value;
@@ -467,46 +691,58 @@ class XataApiClient {
467
691
  __privateAdd$7(this, _extraProps, void 0);
468
692
  __privateAdd$7(this, _namespaces, {});
469
693
  const provider = options.host ?? "production";
470
- const apiKey = options?.apiKey ?? getAPIKey();
694
+ const apiKey = options.apiKey ?? getAPIKey();
695
+ const trace = options.trace ?? defaultTrace;
471
696
  if (!apiKey) {
472
697
  throw new Error("Could not resolve a valid apiKey");
473
698
  }
474
- __privateSet$5(this, _extraProps, {
699
+ __privateSet$7(this, _extraProps, {
475
700
  apiUrl: getHostUrl(provider, "main"),
476
701
  workspacesApiUrl: getHostUrl(provider, "workspaces"),
477
702
  fetchImpl: getFetchImplementation(options.fetch),
478
- apiKey
703
+ apiKey,
704
+ trace
479
705
  });
480
706
  }
481
707
  get user() {
482
- if (!__privateGet$6(this, _namespaces).user)
483
- __privateGet$6(this, _namespaces).user = new UserApi(__privateGet$6(this, _extraProps));
484
- return __privateGet$6(this, _namespaces).user;
708
+ if (!__privateGet$7(this, _namespaces).user)
709
+ __privateGet$7(this, _namespaces).user = new UserApi(__privateGet$7(this, _extraProps));
710
+ return __privateGet$7(this, _namespaces).user;
485
711
  }
486
712
  get workspaces() {
487
- if (!__privateGet$6(this, _namespaces).workspaces)
488
- __privateGet$6(this, _namespaces).workspaces = new WorkspaceApi(__privateGet$6(this, _extraProps));
489
- return __privateGet$6(this, _namespaces).workspaces;
713
+ if (!__privateGet$7(this, _namespaces).workspaces)
714
+ __privateGet$7(this, _namespaces).workspaces = new WorkspaceApi(__privateGet$7(this, _extraProps));
715
+ return __privateGet$7(this, _namespaces).workspaces;
490
716
  }
491
717
  get databases() {
492
- if (!__privateGet$6(this, _namespaces).databases)
493
- __privateGet$6(this, _namespaces).databases = new DatabaseApi(__privateGet$6(this, _extraProps));
494
- return __privateGet$6(this, _namespaces).databases;
718
+ if (!__privateGet$7(this, _namespaces).databases)
719
+ __privateGet$7(this, _namespaces).databases = new DatabaseApi(__privateGet$7(this, _extraProps));
720
+ return __privateGet$7(this, _namespaces).databases;
495
721
  }
496
722
  get branches() {
497
- if (!__privateGet$6(this, _namespaces).branches)
498
- __privateGet$6(this, _namespaces).branches = new BranchApi(__privateGet$6(this, _extraProps));
499
- return __privateGet$6(this, _namespaces).branches;
723
+ if (!__privateGet$7(this, _namespaces).branches)
724
+ __privateGet$7(this, _namespaces).branches = new BranchApi(__privateGet$7(this, _extraProps));
725
+ return __privateGet$7(this, _namespaces).branches;
500
726
  }
501
727
  get tables() {
502
- if (!__privateGet$6(this, _namespaces).tables)
503
- __privateGet$6(this, _namespaces).tables = new TableApi(__privateGet$6(this, _extraProps));
504
- return __privateGet$6(this, _namespaces).tables;
728
+ if (!__privateGet$7(this, _namespaces).tables)
729
+ __privateGet$7(this, _namespaces).tables = new TableApi(__privateGet$7(this, _extraProps));
730
+ return __privateGet$7(this, _namespaces).tables;
505
731
  }
506
732
  get records() {
507
- if (!__privateGet$6(this, _namespaces).records)
508
- __privateGet$6(this, _namespaces).records = new RecordsApi(__privateGet$6(this, _extraProps));
509
- return __privateGet$6(this, _namespaces).records;
733
+ if (!__privateGet$7(this, _namespaces).records)
734
+ __privateGet$7(this, _namespaces).records = new RecordsApi(__privateGet$7(this, _extraProps));
735
+ return __privateGet$7(this, _namespaces).records;
736
+ }
737
+ get migrationRequests() {
738
+ if (!__privateGet$7(this, _namespaces).migrationRequests)
739
+ __privateGet$7(this, _namespaces).migrationRequests = new MigrationRequestsApi(__privateGet$7(this, _extraProps));
740
+ return __privateGet$7(this, _namespaces).migrationRequests;
741
+ }
742
+ get branchSchema() {
743
+ if (!__privateGet$7(this, _namespaces).branchSchema)
744
+ __privateGet$7(this, _namespaces).branchSchema = new BranchSchemaApi(__privateGet$7(this, _extraProps));
745
+ return __privateGet$7(this, _namespaces).branchSchema;
510
746
  }
511
747
  }
512
748
  _extraProps = new WeakMap();
@@ -598,6 +834,13 @@ class WorkspaceApi {
598
834
  ...this.extraProps
599
835
  });
600
836
  }
837
+ updateWorkspaceMemberInvite(workspaceId, inviteId, role) {
838
+ return operationsByTag.workspaces.updateWorkspaceMemberInvite({
839
+ pathParams: { workspaceId, inviteId },
840
+ body: { role },
841
+ ...this.extraProps
842
+ });
843
+ }
601
844
  cancelWorkspaceMemberInvite(workspaceId, inviteId) {
602
845
  return operationsByTag.workspaces.cancelWorkspaceMemberInvite({
603
846
  pathParams: { workspaceId, inviteId },
@@ -640,6 +883,46 @@ class DatabaseApi {
640
883
  ...this.extraProps
641
884
  });
642
885
  }
886
+ getDatabaseMetadata(workspace, dbName) {
887
+ return operationsByTag.database.getDatabaseMetadata({
888
+ pathParams: { workspace, dbName },
889
+ ...this.extraProps
890
+ });
891
+ }
892
+ updateDatabaseMetadata(workspace, dbName, options = {}) {
893
+ return operationsByTag.database.updateDatabaseMetadata({
894
+ pathParams: { workspace, dbName },
895
+ body: options,
896
+ ...this.extraProps
897
+ });
898
+ }
899
+ getGitBranchesMapping(workspace, dbName) {
900
+ return operationsByTag.database.getGitBranchesMapping({
901
+ pathParams: { workspace, dbName },
902
+ ...this.extraProps
903
+ });
904
+ }
905
+ addGitBranchesEntry(workspace, dbName, body) {
906
+ return operationsByTag.database.addGitBranchesEntry({
907
+ pathParams: { workspace, dbName },
908
+ body,
909
+ ...this.extraProps
910
+ });
911
+ }
912
+ removeGitBranchesEntry(workspace, dbName, gitBranch) {
913
+ return operationsByTag.database.removeGitBranchesEntry({
914
+ pathParams: { workspace, dbName },
915
+ queryParams: { gitBranch },
916
+ ...this.extraProps
917
+ });
918
+ }
919
+ resolveBranch(workspace, dbName, gitBranch, fallbackBranch) {
920
+ return operationsByTag.database.resolveBranch({
921
+ pathParams: { workspace, dbName },
922
+ queryParams: { gitBranch, fallbackBranch },
923
+ ...this.extraProps
924
+ });
925
+ }
643
926
  }
644
927
  class BranchApi {
645
928
  constructor(extraProps) {
@@ -657,10 +940,10 @@ class BranchApi {
657
940
  ...this.extraProps
658
941
  });
659
942
  }
660
- createBranch(workspace, database, branch, from = "", options = {}) {
943
+ createBranch(workspace, database, branch, from, options = {}) {
661
944
  return operationsByTag.branch.createBranch({
662
945
  pathParams: { workspace, dbBranchName: `${database}:${branch}` },
663
- queryParams: { from },
946
+ queryParams: isString(from) ? { from } : void 0,
664
947
  body: options,
665
948
  ...this.extraProps
666
949
  });
@@ -684,27 +967,6 @@ class BranchApi {
684
967
  ...this.extraProps
685
968
  });
686
969
  }
687
- getBranchMigrationHistory(workspace, database, branch, options = {}) {
688
- return operationsByTag.branch.getBranchMigrationHistory({
689
- pathParams: { workspace, dbBranchName: `${database}:${branch}` },
690
- body: options,
691
- ...this.extraProps
692
- });
693
- }
694
- executeBranchMigrationPlan(workspace, database, branch, migrationPlan) {
695
- return operationsByTag.branch.executeBranchMigrationPlan({
696
- pathParams: { workspace, dbBranchName: `${database}:${branch}` },
697
- body: migrationPlan,
698
- ...this.extraProps
699
- });
700
- }
701
- getBranchMigrationPlan(workspace, database, branch, schema) {
702
- return operationsByTag.branch.getBranchMigrationPlan({
703
- pathParams: { workspace, dbBranchName: `${database}:${branch}` },
704
- body: schema,
705
- ...this.extraProps
706
- });
707
- }
708
970
  getBranchStats(workspace, database, branch) {
709
971
  return operationsByTag.branch.getBranchStats({
710
972
  pathParams: { workspace, dbBranchName: `${database}:${branch}` },
@@ -785,9 +1047,10 @@ class RecordsApi {
785
1047
  constructor(extraProps) {
786
1048
  this.extraProps = extraProps;
787
1049
  }
788
- insertRecord(workspace, database, branch, tableName, record) {
1050
+ insertRecord(workspace, database, branch, tableName, record, options = {}) {
789
1051
  return operationsByTag.records.insertRecord({
790
1052
  pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },
1053
+ queryParams: options,
791
1054
  body: record,
792
1055
  ...this.extraProps
793
1056
  });
@@ -816,21 +1079,24 @@ class RecordsApi {
816
1079
  ...this.extraProps
817
1080
  });
818
1081
  }
819
- deleteRecord(workspace, database, branch, tableName, recordId) {
1082
+ deleteRecord(workspace, database, branch, tableName, recordId, options = {}) {
820
1083
  return operationsByTag.records.deleteRecord({
821
1084
  pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, recordId },
1085
+ queryParams: options,
822
1086
  ...this.extraProps
823
1087
  });
824
1088
  }
825
1089
  getRecord(workspace, database, branch, tableName, recordId, options = {}) {
826
1090
  return operationsByTag.records.getRecord({
827
1091
  pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, recordId },
1092
+ queryParams: options,
828
1093
  ...this.extraProps
829
1094
  });
830
1095
  }
831
- bulkInsertTableRecords(workspace, database, branch, tableName, records) {
1096
+ bulkInsertTableRecords(workspace, database, branch, tableName, records, options = {}) {
832
1097
  return operationsByTag.records.bulkInsertTableRecords({
833
1098
  pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },
1099
+ queryParams: options,
834
1100
  body: { records },
835
1101
  ...this.extraProps
836
1102
  });
@@ -842,6 +1108,13 @@ class RecordsApi {
842
1108
  ...this.extraProps
843
1109
  });
844
1110
  }
1111
+ searchTable(workspace, database, branch, tableName, query) {
1112
+ return operationsByTag.records.searchTable({
1113
+ pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },
1114
+ body: query,
1115
+ ...this.extraProps
1116
+ });
1117
+ }
845
1118
  searchBranch(workspace, database, branch, query) {
846
1119
  return operationsByTag.records.searchBranch({
847
1120
  pathParams: { workspace, dbBranchName: `${database}:${branch}` },
@@ -849,6 +1122,138 @@ class RecordsApi {
849
1122
  ...this.extraProps
850
1123
  });
851
1124
  }
1125
+ summarizeTable(workspace, database, branch, tableName, query) {
1126
+ return operationsByTag.records.summarizeTable({
1127
+ pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },
1128
+ body: query,
1129
+ ...this.extraProps
1130
+ });
1131
+ }
1132
+ }
1133
+ class MigrationRequestsApi {
1134
+ constructor(extraProps) {
1135
+ this.extraProps = extraProps;
1136
+ }
1137
+ listMigrationRequests(workspace, database, options = {}) {
1138
+ return operationsByTag.migrationRequests.listMigrationRequests({
1139
+ pathParams: { workspace, dbName: database },
1140
+ body: options,
1141
+ ...this.extraProps
1142
+ });
1143
+ }
1144
+ createMigrationRequest(workspace, database, options) {
1145
+ return operationsByTag.migrationRequests.createMigrationRequest({
1146
+ pathParams: { workspace, dbName: database },
1147
+ body: options,
1148
+ ...this.extraProps
1149
+ });
1150
+ }
1151
+ getMigrationRequest(workspace, database, migrationRequest) {
1152
+ return operationsByTag.migrationRequests.getMigrationRequest({
1153
+ pathParams: { workspace, dbName: database, mrNumber: migrationRequest },
1154
+ ...this.extraProps
1155
+ });
1156
+ }
1157
+ updateMigrationRequest(workspace, database, migrationRequest, options) {
1158
+ return operationsByTag.migrationRequests.updateMigrationRequest({
1159
+ pathParams: { workspace, dbName: database, mrNumber: migrationRequest },
1160
+ body: options,
1161
+ ...this.extraProps
1162
+ });
1163
+ }
1164
+ listMigrationRequestsCommits(workspace, database, migrationRequest, options = {}) {
1165
+ return operationsByTag.migrationRequests.listMigrationRequestsCommits({
1166
+ pathParams: { workspace, dbName: database, mrNumber: migrationRequest },
1167
+ body: options,
1168
+ ...this.extraProps
1169
+ });
1170
+ }
1171
+ compareMigrationRequest(workspace, database, migrationRequest) {
1172
+ return operationsByTag.migrationRequests.compareMigrationRequest({
1173
+ pathParams: { workspace, dbName: database, mrNumber: migrationRequest },
1174
+ ...this.extraProps
1175
+ });
1176
+ }
1177
+ getMigrationRequestIsMerged(workspace, database, migrationRequest) {
1178
+ return operationsByTag.migrationRequests.getMigrationRequestIsMerged({
1179
+ pathParams: { workspace, dbName: database, mrNumber: migrationRequest },
1180
+ ...this.extraProps
1181
+ });
1182
+ }
1183
+ mergeMigrationRequest(workspace, database, migrationRequest) {
1184
+ return operationsByTag.migrationRequests.mergeMigrationRequest({
1185
+ pathParams: { workspace, dbName: database, mrNumber: migrationRequest },
1186
+ ...this.extraProps
1187
+ });
1188
+ }
1189
+ }
1190
+ class BranchSchemaApi {
1191
+ constructor(extraProps) {
1192
+ this.extraProps = extraProps;
1193
+ }
1194
+ getBranchMigrationHistory(workspace, database, branch, options = {}) {
1195
+ return operationsByTag.branchSchema.getBranchMigrationHistory({
1196
+ pathParams: { workspace, dbBranchName: `${database}:${branch}` },
1197
+ body: options,
1198
+ ...this.extraProps
1199
+ });
1200
+ }
1201
+ executeBranchMigrationPlan(workspace, database, branch, migrationPlan) {
1202
+ return operationsByTag.branchSchema.executeBranchMigrationPlan({
1203
+ pathParams: { workspace, dbBranchName: `${database}:${branch}` },
1204
+ body: migrationPlan,
1205
+ ...this.extraProps
1206
+ });
1207
+ }
1208
+ getBranchMigrationPlan(workspace, database, branch, schema) {
1209
+ return operationsByTag.branchSchema.getBranchMigrationPlan({
1210
+ pathParams: { workspace, dbBranchName: `${database}:${branch}` },
1211
+ body: schema,
1212
+ ...this.extraProps
1213
+ });
1214
+ }
1215
+ compareBranchWithUserSchema(workspace, database, branch, schema) {
1216
+ return operationsByTag.branchSchema.compareBranchWithUserSchema({
1217
+ pathParams: { workspace, dbBranchName: `${database}:${branch}` },
1218
+ body: { schema },
1219
+ ...this.extraProps
1220
+ });
1221
+ }
1222
+ compareBranchSchemas(workspace, database, branch, branchName, schema) {
1223
+ return operationsByTag.branchSchema.compareBranchSchemas({
1224
+ pathParams: { workspace, dbBranchName: `${database}:${branch}`, branchName },
1225
+ body: { schema },
1226
+ ...this.extraProps
1227
+ });
1228
+ }
1229
+ updateBranchSchema(workspace, database, branch, migration) {
1230
+ return operationsByTag.branchSchema.updateBranchSchema({
1231
+ pathParams: { workspace, dbBranchName: `${database}:${branch}` },
1232
+ body: migration,
1233
+ ...this.extraProps
1234
+ });
1235
+ }
1236
+ previewBranchSchemaEdit(workspace, database, branch, migration) {
1237
+ return operationsByTag.branchSchema.previewBranchSchemaEdit({
1238
+ pathParams: { workspace, dbBranchName: `${database}:${branch}` },
1239
+ body: migration,
1240
+ ...this.extraProps
1241
+ });
1242
+ }
1243
+ applyBranchSchemaEdit(workspace, database, branch, edits) {
1244
+ return operationsByTag.branchSchema.applyBranchSchemaEdit({
1245
+ pathParams: { workspace, dbBranchName: `${database}:${branch}` },
1246
+ body: { edits },
1247
+ ...this.extraProps
1248
+ });
1249
+ }
1250
+ getBranchSchemaHistory(workspace, database, branch, options = {}) {
1251
+ return operationsByTag.branchSchema.getBranchSchemaHistory({
1252
+ pathParams: { workspace, dbBranchName: `${database}:${branch}` },
1253
+ body: options,
1254
+ ...this.extraProps
1255
+ });
1256
+ }
852
1257
  }
853
1258
 
854
1259
  class XataApiPlugin {
@@ -865,7 +1270,7 @@ var __accessCheck$6 = (obj, member, msg) => {
865
1270
  if (!member.has(obj))
866
1271
  throw TypeError("Cannot " + msg);
867
1272
  };
868
- var __privateGet$5 = (obj, member, getter) => {
1273
+ var __privateGet$6 = (obj, member, getter) => {
869
1274
  __accessCheck$6(obj, member, "read from private field");
870
1275
  return getter ? getter.call(obj) : member.get(obj);
871
1276
  };
@@ -874,30 +1279,30 @@ var __privateAdd$6 = (obj, member, value) => {
874
1279
  throw TypeError("Cannot add the same private member more than once");
875
1280
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
876
1281
  };
877
- var __privateSet$4 = (obj, member, value, setter) => {
1282
+ var __privateSet$6 = (obj, member, value, setter) => {
878
1283
  __accessCheck$6(obj, member, "write to private field");
879
1284
  setter ? setter.call(obj, value) : member.set(obj, value);
880
1285
  return value;
881
1286
  };
882
- var _query;
1287
+ var _query, _page;
883
1288
  class Page {
884
1289
  constructor(query, meta, records = []) {
885
1290
  __privateAdd$6(this, _query, void 0);
886
- __privateSet$4(this, _query, query);
1291
+ __privateSet$6(this, _query, query);
887
1292
  this.meta = meta;
888
- this.records = records;
1293
+ this.records = new RecordArray(this, records);
889
1294
  }
890
1295
  async nextPage(size, offset) {
891
- return __privateGet$5(this, _query).getPaginated({ page: { size, offset, after: this.meta.page.cursor } });
1296
+ return __privateGet$6(this, _query).getPaginated({ pagination: { size, offset, after: this.meta.page.cursor } });
892
1297
  }
893
1298
  async previousPage(size, offset) {
894
- return __privateGet$5(this, _query).getPaginated({ page: { size, offset, before: this.meta.page.cursor } });
1299
+ return __privateGet$6(this, _query).getPaginated({ pagination: { size, offset, before: this.meta.page.cursor } });
895
1300
  }
896
1301
  async firstPage(size, offset) {
897
- return __privateGet$5(this, _query).getPaginated({ page: { size, offset, first: this.meta.page.cursor } });
1302
+ return __privateGet$6(this, _query).getPaginated({ pagination: { size, offset, first: this.meta.page.cursor } });
898
1303
  }
899
1304
  async lastPage(size, offset) {
900
- return __privateGet$5(this, _query).getPaginated({ page: { size, offset, last: this.meta.page.cursor } });
1305
+ return __privateGet$6(this, _query).getPaginated({ pagination: { size, offset, last: this.meta.page.cursor } });
901
1306
  }
902
1307
  hasNextPage() {
903
1308
  return this.meta.page.more;
@@ -905,15 +1310,62 @@ class Page {
905
1310
  }
906
1311
  _query = new WeakMap();
907
1312
  const PAGINATION_MAX_SIZE = 200;
908
- const PAGINATION_DEFAULT_SIZE = 200;
1313
+ const PAGINATION_DEFAULT_SIZE = 20;
909
1314
  const PAGINATION_MAX_OFFSET = 800;
910
1315
  const PAGINATION_DEFAULT_OFFSET = 0;
1316
+ function isCursorPaginationOptions(options) {
1317
+ return isDefined(options) && (isDefined(options.first) || isDefined(options.last) || isDefined(options.after) || isDefined(options.before));
1318
+ }
1319
+ const _RecordArray = class extends Array {
1320
+ constructor(...args) {
1321
+ super(..._RecordArray.parseConstructorParams(...args));
1322
+ __privateAdd$6(this, _page, void 0);
1323
+ __privateSet$6(this, _page, isObject(args[0]?.meta) ? args[0] : { meta: { page: { cursor: "", more: false } }, records: [] });
1324
+ }
1325
+ static parseConstructorParams(...args) {
1326
+ if (args.length === 1 && typeof args[0] === "number") {
1327
+ return new Array(args[0]);
1328
+ }
1329
+ if (args.length <= 2 && isObject(args[0]?.meta) && Array.isArray(args[1] ?? [])) {
1330
+ const result = args[1] ?? args[0].records ?? [];
1331
+ return new Array(...result);
1332
+ }
1333
+ return new Array(...args);
1334
+ }
1335
+ toArray() {
1336
+ return new Array(...this);
1337
+ }
1338
+ map(callbackfn, thisArg) {
1339
+ return this.toArray().map(callbackfn, thisArg);
1340
+ }
1341
+ async nextPage(size, offset) {
1342
+ const newPage = await __privateGet$6(this, _page).nextPage(size, offset);
1343
+ return new _RecordArray(newPage);
1344
+ }
1345
+ async previousPage(size, offset) {
1346
+ const newPage = await __privateGet$6(this, _page).previousPage(size, offset);
1347
+ return new _RecordArray(newPage);
1348
+ }
1349
+ async firstPage(size, offset) {
1350
+ const newPage = await __privateGet$6(this, _page).firstPage(size, offset);
1351
+ return new _RecordArray(newPage);
1352
+ }
1353
+ async lastPage(size, offset) {
1354
+ const newPage = await __privateGet$6(this, _page).lastPage(size, offset);
1355
+ return new _RecordArray(newPage);
1356
+ }
1357
+ hasNextPage() {
1358
+ return __privateGet$6(this, _page).meta.page.more;
1359
+ }
1360
+ };
1361
+ let RecordArray = _RecordArray;
1362
+ _page = new WeakMap();
911
1363
 
912
1364
  var __accessCheck$5 = (obj, member, msg) => {
913
1365
  if (!member.has(obj))
914
1366
  throw TypeError("Cannot " + msg);
915
1367
  };
916
- var __privateGet$4 = (obj, member, getter) => {
1368
+ var __privateGet$5 = (obj, member, getter) => {
917
1369
  __accessCheck$5(obj, member, "read from private field");
918
1370
  return getter ? getter.call(obj) : member.get(obj);
919
1371
  };
@@ -922,34 +1374,40 @@ var __privateAdd$5 = (obj, member, value) => {
922
1374
  throw TypeError("Cannot add the same private member more than once");
923
1375
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
924
1376
  };
925
- var __privateSet$3 = (obj, member, value, setter) => {
1377
+ var __privateSet$5 = (obj, member, value, setter) => {
926
1378
  __accessCheck$5(obj, member, "write to private field");
927
1379
  setter ? setter.call(obj, value) : member.set(obj, value);
928
1380
  return value;
929
1381
  };
930
- var _table$1, _repository, _data;
1382
+ var __privateMethod$3 = (obj, member, method) => {
1383
+ __accessCheck$5(obj, member, "access private method");
1384
+ return method;
1385
+ };
1386
+ var _table$1, _repository, _data, _cleanFilterConstraint, cleanFilterConstraint_fn;
931
1387
  const _Query = class {
932
- constructor(repository, table, data, parent) {
1388
+ constructor(repository, table, data, rawParent) {
1389
+ __privateAdd$5(this, _cleanFilterConstraint);
933
1390
  __privateAdd$5(this, _table$1, void 0);
934
1391
  __privateAdd$5(this, _repository, void 0);
935
1392
  __privateAdd$5(this, _data, { filter: {} });
936
1393
  this.meta = { page: { cursor: "start", more: true } };
937
- this.records = [];
938
- __privateSet$3(this, _table$1, table);
1394
+ this.records = new RecordArray(this, []);
1395
+ __privateSet$5(this, _table$1, table);
939
1396
  if (repository) {
940
- __privateSet$3(this, _repository, repository);
1397
+ __privateSet$5(this, _repository, repository);
941
1398
  } else {
942
- __privateSet$3(this, _repository, this);
1399
+ __privateSet$5(this, _repository, this);
943
1400
  }
944
- __privateGet$4(this, _data).filter = data.filter ?? parent?.filter ?? {};
945
- __privateGet$4(this, _data).filter.$any = data.filter?.$any ?? parent?.filter?.$any;
946
- __privateGet$4(this, _data).filter.$all = data.filter?.$all ?? parent?.filter?.$all;
947
- __privateGet$4(this, _data).filter.$not = data.filter?.$not ?? parent?.filter?.$not;
948
- __privateGet$4(this, _data).filter.$none = data.filter?.$none ?? parent?.filter?.$none;
949
- __privateGet$4(this, _data).sort = data.sort ?? parent?.sort;
950
- __privateGet$4(this, _data).columns = data.columns ?? parent?.columns ?? ["*"];
951
- __privateGet$4(this, _data).page = data.page ?? parent?.page;
952
- __privateGet$4(this, _data).cache = data.cache ?? parent?.cache;
1401
+ const parent = cleanParent(data, rawParent);
1402
+ __privateGet$5(this, _data).filter = data.filter ?? parent?.filter ?? {};
1403
+ __privateGet$5(this, _data).filter.$any = data.filter?.$any ?? parent?.filter?.$any;
1404
+ __privateGet$5(this, _data).filter.$all = data.filter?.$all ?? parent?.filter?.$all;
1405
+ __privateGet$5(this, _data).filter.$not = data.filter?.$not ?? parent?.filter?.$not;
1406
+ __privateGet$5(this, _data).filter.$none = data.filter?.$none ?? parent?.filter?.$none;
1407
+ __privateGet$5(this, _data).sort = data.sort ?? parent?.sort;
1408
+ __privateGet$5(this, _data).columns = data.columns ?? parent?.columns ?? ["*"];
1409
+ __privateGet$5(this, _data).pagination = data.pagination ?? parent?.pagination;
1410
+ __privateGet$5(this, _data).cache = data.cache ?? parent?.cache;
953
1411
  this.any = this.any.bind(this);
954
1412
  this.all = this.all.bind(this);
955
1413
  this.not = this.not.bind(this);
@@ -960,83 +1418,111 @@ const _Query = class {
960
1418
  Object.defineProperty(this, "repository", { enumerable: false });
961
1419
  }
962
1420
  getQueryOptions() {
963
- return __privateGet$4(this, _data);
1421
+ return __privateGet$5(this, _data);
964
1422
  }
965
1423
  key() {
966
- const { columns = [], filter = {}, sort = [], page = {} } = __privateGet$4(this, _data);
967
- const key = JSON.stringify({ columns, filter, sort, page });
1424
+ const { columns = [], filter = {}, sort = [], pagination = {} } = __privateGet$5(this, _data);
1425
+ const key = JSON.stringify({ columns, filter, sort, pagination });
968
1426
  return toBase64(key);
969
1427
  }
970
1428
  any(...queries) {
971
1429
  const $any = queries.map((query) => query.getQueryOptions().filter ?? {});
972
- return new _Query(__privateGet$4(this, _repository), __privateGet$4(this, _table$1), { filter: { $any } }, __privateGet$4(this, _data));
1430
+ return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { filter: { $any } }, __privateGet$5(this, _data));
973
1431
  }
974
1432
  all(...queries) {
975
1433
  const $all = queries.map((query) => query.getQueryOptions().filter ?? {});
976
- return new _Query(__privateGet$4(this, _repository), __privateGet$4(this, _table$1), { filter: { $all } }, __privateGet$4(this, _data));
1434
+ return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { filter: { $all } }, __privateGet$5(this, _data));
977
1435
  }
978
1436
  not(...queries) {
979
1437
  const $not = queries.map((query) => query.getQueryOptions().filter ?? {});
980
- return new _Query(__privateGet$4(this, _repository), __privateGet$4(this, _table$1), { filter: { $not } }, __privateGet$4(this, _data));
1438
+ return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { filter: { $not } }, __privateGet$5(this, _data));
981
1439
  }
982
1440
  none(...queries) {
983
1441
  const $none = queries.map((query) => query.getQueryOptions().filter ?? {});
984
- return new _Query(__privateGet$4(this, _repository), __privateGet$4(this, _table$1), { filter: { $none } }, __privateGet$4(this, _data));
1442
+ return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { filter: { $none } }, __privateGet$5(this, _data));
985
1443
  }
986
1444
  filter(a, b) {
987
1445
  if (arguments.length === 1) {
988
- const constraints = Object.entries(a).map(([column, constraint]) => ({ [column]: constraint }));
989
- const $all = compact([__privateGet$4(this, _data).filter?.$all].flat().concat(constraints));
990
- return new _Query(__privateGet$4(this, _repository), __privateGet$4(this, _table$1), { filter: { $all } }, __privateGet$4(this, _data));
1446
+ const constraints = Object.entries(a ?? {}).map(([column, constraint]) => ({
1447
+ [column]: __privateMethod$3(this, _cleanFilterConstraint, cleanFilterConstraint_fn).call(this, column, constraint)
1448
+ }));
1449
+ const $all = compact([__privateGet$5(this, _data).filter?.$all].flat().concat(constraints));
1450
+ return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { filter: { $all } }, __privateGet$5(this, _data));
991
1451
  } else {
992
- const $all = compact([__privateGet$4(this, _data).filter?.$all].flat().concat([{ [a]: b }]));
993
- return new _Query(__privateGet$4(this, _repository), __privateGet$4(this, _table$1), { filter: { $all } }, __privateGet$4(this, _data));
1452
+ const constraints = isDefined(a) && isDefined(b) ? [{ [a]: __privateMethod$3(this, _cleanFilterConstraint, cleanFilterConstraint_fn).call(this, a, b) }] : void 0;
1453
+ const $all = compact([__privateGet$5(this, _data).filter?.$all].flat().concat(constraints));
1454
+ return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { filter: { $all } }, __privateGet$5(this, _data));
994
1455
  }
995
1456
  }
996
- sort(column, direction) {
997
- const originalSort = [__privateGet$4(this, _data).sort ?? []].flat();
1457
+ sort(column, direction = "asc") {
1458
+ const originalSort = [__privateGet$5(this, _data).sort ?? []].flat();
998
1459
  const sort = [...originalSort, { column, direction }];
999
- return new _Query(__privateGet$4(this, _repository), __privateGet$4(this, _table$1), { sort }, __privateGet$4(this, _data));
1460
+ return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { sort }, __privateGet$5(this, _data));
1000
1461
  }
1001
1462
  select(columns) {
1002
- return new _Query(__privateGet$4(this, _repository), __privateGet$4(this, _table$1), { columns }, __privateGet$4(this, _data));
1463
+ return new _Query(
1464
+ __privateGet$5(this, _repository),
1465
+ __privateGet$5(this, _table$1),
1466
+ { columns },
1467
+ __privateGet$5(this, _data)
1468
+ );
1003
1469
  }
1004
1470
  getPaginated(options = {}) {
1005
- const query = new _Query(__privateGet$4(this, _repository), __privateGet$4(this, _table$1), options, __privateGet$4(this, _data));
1006
- return __privateGet$4(this, _repository).query(query);
1471
+ const query = new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), options, __privateGet$5(this, _data));
1472
+ return __privateGet$5(this, _repository).query(query);
1007
1473
  }
1008
1474
  async *[Symbol.asyncIterator]() {
1009
- for await (const [record] of this.getIterator(1)) {
1475
+ for await (const [record] of this.getIterator({ batchSize: 1 })) {
1010
1476
  yield record;
1011
1477
  }
1012
1478
  }
1013
- async *getIterator(chunk, options = {}) {
1014
- let offset = 0;
1015
- let end = false;
1016
- while (!end) {
1017
- const { records, meta } = await this.getPaginated({ ...options, page: { size: chunk, offset } });
1018
- yield records;
1019
- offset += chunk;
1020
- end = !meta.page.more;
1479
+ async *getIterator(options = {}) {
1480
+ const { batchSize = 1 } = options;
1481
+ let page = await this.getPaginated({ ...options, pagination: { size: batchSize, offset: 0 } });
1482
+ let more = page.hasNextPage();
1483
+ yield page.records;
1484
+ while (more) {
1485
+ page = await page.nextPage();
1486
+ more = page.hasNextPage();
1487
+ yield page.records;
1021
1488
  }
1022
1489
  }
1023
1490
  async getMany(options = {}) {
1024
- const { records } = await this.getPaginated(options);
1025
- return records;
1491
+ const { pagination = {}, ...rest } = options;
1492
+ const { size = PAGINATION_DEFAULT_SIZE, offset } = pagination;
1493
+ const batchSize = size <= PAGINATION_MAX_SIZE ? size : PAGINATION_MAX_SIZE;
1494
+ let page = await this.getPaginated({ ...rest, pagination: { size: batchSize, offset } });
1495
+ const results = [...page.records];
1496
+ while (page.hasNextPage() && results.length < size) {
1497
+ page = await page.nextPage();
1498
+ results.push(...page.records);
1499
+ }
1500
+ if (page.hasNextPage() && options.pagination?.size === void 0) {
1501
+ console.trace("Calling getMany does not return all results. Paginate to get all results or call getAll.");
1502
+ }
1503
+ const array = new RecordArray(page, results.slice(0, size));
1504
+ return array;
1026
1505
  }
1027
- async getAll(chunk = PAGINATION_MAX_SIZE, options = {}) {
1506
+ async getAll(options = {}) {
1507
+ const { batchSize = PAGINATION_MAX_SIZE, ...rest } = options;
1028
1508
  const results = [];
1029
- for await (const page of this.getIterator(chunk, options)) {
1509
+ for await (const page of this.getIterator({ ...rest, batchSize })) {
1030
1510
  results.push(...page);
1031
1511
  }
1032
1512
  return results;
1033
1513
  }
1034
1514
  async getFirst(options = {}) {
1035
- const records = await this.getMany({ ...options, page: { size: 1 } });
1036
- return records[0] || null;
1515
+ const records = await this.getMany({ ...options, pagination: { size: 1 } });
1516
+ return records[0] ?? null;
1517
+ }
1518
+ async getFirstOrThrow(options = {}) {
1519
+ const records = await this.getMany({ ...options, pagination: { size: 1 } });
1520
+ if (records[0] === void 0)
1521
+ throw new Error("No results found.");
1522
+ return records[0];
1037
1523
  }
1038
1524
  cache(ttl) {
1039
- return new _Query(__privateGet$4(this, _repository), __privateGet$4(this, _table$1), { cache: ttl }, __privateGet$4(this, _data));
1525
+ return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { cache: ttl }, __privateGet$5(this, _data));
1040
1526
  }
1041
1527
  nextPage(size, offset) {
1042
1528
  return this.firstPage(size, offset);
@@ -1045,10 +1531,10 @@ const _Query = class {
1045
1531
  return this.firstPage(size, offset);
1046
1532
  }
1047
1533
  firstPage(size, offset) {
1048
- return this.getPaginated({ page: { size, offset } });
1534
+ return this.getPaginated({ pagination: { size, offset } });
1049
1535
  }
1050
1536
  lastPage(size, offset) {
1051
- return this.getPaginated({ page: { size, offset, before: "end" } });
1537
+ return this.getPaginated({ pagination: { size, offset, before: "end" } });
1052
1538
  }
1053
1539
  hasNextPage() {
1054
1540
  return this.meta.page.more;
@@ -1058,12 +1544,31 @@ let Query = _Query;
1058
1544
  _table$1 = new WeakMap();
1059
1545
  _repository = new WeakMap();
1060
1546
  _data = new WeakMap();
1547
+ _cleanFilterConstraint = new WeakSet();
1548
+ cleanFilterConstraint_fn = function(column, value) {
1549
+ const columnType = __privateGet$5(this, _table$1).schema?.columns.find(({ name }) => name === column)?.type;
1550
+ if (columnType === "multiple" && (isString(value) || isStringArray(value))) {
1551
+ return { $includes: value };
1552
+ }
1553
+ if (columnType === "link" && isObject(value) && isString(value.id)) {
1554
+ return value.id;
1555
+ }
1556
+ return value;
1557
+ };
1558
+ function cleanParent(data, parent) {
1559
+ if (isCursorPaginationOptions(data.pagination)) {
1560
+ return { ...parent, sorting: void 0, filter: void 0 };
1561
+ }
1562
+ return parent;
1563
+ }
1061
1564
 
1062
1565
  function isIdentifiable(x) {
1063
1566
  return isObject(x) && isString(x?.id);
1064
1567
  }
1065
1568
  function isXataRecord(x) {
1066
- return isIdentifiable(x) && typeof x?.xata === "object" && typeof x?.xata?.version === "number";
1569
+ const record = x;
1570
+ const metadata = record?.getMetadata();
1571
+ return isIdentifiable(x) && isObject(metadata) && typeof metadata.version === "number";
1067
1572
  }
1068
1573
 
1069
1574
  function isSortFilterString(value) {
@@ -1093,7 +1598,7 @@ var __accessCheck$4 = (obj, member, msg) => {
1093
1598
  if (!member.has(obj))
1094
1599
  throw TypeError("Cannot " + msg);
1095
1600
  };
1096
- var __privateGet$3 = (obj, member, getter) => {
1601
+ var __privateGet$4 = (obj, member, getter) => {
1097
1602
  __accessCheck$4(obj, member, "read from private field");
1098
1603
  return getter ? getter.call(obj) : member.get(obj);
1099
1604
  };
@@ -1102,7 +1607,7 @@ var __privateAdd$4 = (obj, member, value) => {
1102
1607
  throw TypeError("Cannot add the same private member more than once");
1103
1608
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
1104
1609
  };
1105
- var __privateSet$2 = (obj, member, value, setter) => {
1610
+ var __privateSet$4 = (obj, member, value, setter) => {
1106
1611
  __accessCheck$4(obj, member, "write to private field");
1107
1612
  setter ? setter.call(obj, value) : member.set(obj, value);
1108
1613
  return value;
@@ -1111,304 +1616,413 @@ var __privateMethod$2 = (obj, member, method) => {
1111
1616
  __accessCheck$4(obj, member, "access private method");
1112
1617
  return method;
1113
1618
  };
1114
- var _table, _links, _getFetchProps, _cache, _insertRecordWithoutId, insertRecordWithoutId_fn, _insertRecordWithId, insertRecordWithId_fn, _bulkInsertTableRecords, bulkInsertTableRecords_fn, _updateRecordWithID, updateRecordWithID_fn, _upsertRecordWithID, upsertRecordWithID_fn, _deleteRecord, deleteRecord_fn, _invalidateCache, invalidateCache_fn, _setCacheRecord, setCacheRecord_fn, _getCacheRecord, getCacheRecord_fn, _setCacheQuery, setCacheQuery_fn, _getCacheQuery, getCacheQuery_fn;
1619
+ var _table, _getFetchProps, _db, _cache, _schemaTables$2, _trace, _insertRecordWithoutId, insertRecordWithoutId_fn, _insertRecordWithId, insertRecordWithId_fn, _bulkInsertTableRecords, bulkInsertTableRecords_fn, _updateRecordWithID, updateRecordWithID_fn, _upsertRecordWithID, upsertRecordWithID_fn, _deleteRecord, deleteRecord_fn, _setCacheQuery, setCacheQuery_fn, _getCacheQuery, getCacheQuery_fn, _getSchemaTables$1, getSchemaTables_fn$1;
1115
1620
  class Repository extends Query {
1116
1621
  }
1117
1622
  class RestRepository extends Query {
1118
1623
  constructor(options) {
1119
- super(null, options.table, {});
1624
+ super(
1625
+ null,
1626
+ { name: options.table, schema: options.schemaTables?.find((table) => table.name === options.table) },
1627
+ {}
1628
+ );
1120
1629
  __privateAdd$4(this, _insertRecordWithoutId);
1121
1630
  __privateAdd$4(this, _insertRecordWithId);
1122
1631
  __privateAdd$4(this, _bulkInsertTableRecords);
1123
1632
  __privateAdd$4(this, _updateRecordWithID);
1124
1633
  __privateAdd$4(this, _upsertRecordWithID);
1125
1634
  __privateAdd$4(this, _deleteRecord);
1126
- __privateAdd$4(this, _invalidateCache);
1127
- __privateAdd$4(this, _setCacheRecord);
1128
- __privateAdd$4(this, _getCacheRecord);
1129
1635
  __privateAdd$4(this, _setCacheQuery);
1130
1636
  __privateAdd$4(this, _getCacheQuery);
1637
+ __privateAdd$4(this, _getSchemaTables$1);
1131
1638
  __privateAdd$4(this, _table, void 0);
1132
- __privateAdd$4(this, _links, void 0);
1133
1639
  __privateAdd$4(this, _getFetchProps, void 0);
1640
+ __privateAdd$4(this, _db, void 0);
1134
1641
  __privateAdd$4(this, _cache, void 0);
1135
- __privateSet$2(this, _table, options.table);
1136
- __privateSet$2(this, _links, options.links ?? {});
1137
- __privateSet$2(this, _getFetchProps, options.pluginOptions.getFetchProps);
1138
- this.db = options.db;
1139
- __privateSet$2(this, _cache, options.pluginOptions.cache);
1140
- }
1141
- async create(a, b) {
1142
- if (Array.isArray(a)) {
1143
- const records = await __privateMethod$2(this, _bulkInsertTableRecords, bulkInsertTableRecords_fn).call(this, a);
1144
- await Promise.all(records.map((record) => __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record)));
1145
- return records;
1146
- }
1147
- if (isString(a) && isObject(b)) {
1148
- if (a === "")
1149
- throw new Error("The id can't be empty");
1150
- const record = await __privateMethod$2(this, _insertRecordWithId, insertRecordWithId_fn).call(this, a, b);
1151
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1152
- return record;
1153
- }
1154
- if (isObject(a) && isString(a.id)) {
1155
- if (a.id === "")
1156
- throw new Error("The id can't be empty");
1157
- const record = await __privateMethod$2(this, _insertRecordWithId, insertRecordWithId_fn).call(this, a.id, { ...a, id: void 0 });
1158
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1159
- return record;
1160
- }
1161
- if (isObject(a)) {
1162
- const record = await __privateMethod$2(this, _insertRecordWithoutId, insertRecordWithoutId_fn).call(this, a);
1163
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1164
- return record;
1165
- }
1166
- throw new Error("Invalid arguments for create method");
1167
- }
1168
- async read(recordId) {
1169
- const cacheRecord = await __privateMethod$2(this, _getCacheRecord, getCacheRecord_fn).call(this, recordId);
1170
- if (cacheRecord)
1171
- return cacheRecord;
1172
- const fetchProps = await __privateGet$3(this, _getFetchProps).call(this);
1173
- try {
1174
- const response = await getRecord({
1175
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$3(this, _table), recordId },
1176
- ...fetchProps
1642
+ __privateAdd$4(this, _schemaTables$2, void 0);
1643
+ __privateAdd$4(this, _trace, void 0);
1644
+ __privateSet$4(this, _table, options.table);
1645
+ __privateSet$4(this, _getFetchProps, options.pluginOptions.getFetchProps);
1646
+ __privateSet$4(this, _db, options.db);
1647
+ __privateSet$4(this, _cache, options.pluginOptions.cache);
1648
+ __privateSet$4(this, _schemaTables$2, options.schemaTables);
1649
+ const trace = options.pluginOptions.trace ?? defaultTrace;
1650
+ __privateSet$4(this, _trace, async (name, fn, options2 = {}) => {
1651
+ return trace(name, fn, {
1652
+ ...options2,
1653
+ [TraceAttributes.TABLE]: __privateGet$4(this, _table),
1654
+ [TraceAttributes.KIND]: "sdk-operation",
1655
+ [TraceAttributes.VERSION]: VERSION
1177
1656
  });
1178
- return initObject(this.db, __privateGet$3(this, _links), __privateGet$3(this, _table), response);
1179
- } catch (e) {
1180
- if (isObject(e) && e.status === 404) {
1181
- return null;
1657
+ });
1658
+ }
1659
+ async create(a, b, c) {
1660
+ return __privateGet$4(this, _trace).call(this, "create", async () => {
1661
+ if (Array.isArray(a)) {
1662
+ if (a.length === 0)
1663
+ return [];
1664
+ const columns = isStringArray(b) ? b : void 0;
1665
+ return __privateMethod$2(this, _bulkInsertTableRecords, bulkInsertTableRecords_fn).call(this, a, columns);
1182
1666
  }
1183
- throw e;
1184
- }
1667
+ if (isString(a) && isObject(b)) {
1668
+ if (a === "")
1669
+ throw new Error("The id can't be empty");
1670
+ const columns = isStringArray(c) ? c : void 0;
1671
+ return __privateMethod$2(this, _insertRecordWithId, insertRecordWithId_fn).call(this, a, b, columns);
1672
+ }
1673
+ if (isObject(a) && isString(a.id)) {
1674
+ if (a.id === "")
1675
+ throw new Error("The id can't be empty");
1676
+ const columns = isStringArray(b) ? b : void 0;
1677
+ return __privateMethod$2(this, _insertRecordWithId, insertRecordWithId_fn).call(this, a.id, { ...a, id: void 0 }, columns);
1678
+ }
1679
+ if (isObject(a)) {
1680
+ const columns = isStringArray(b) ? b : void 0;
1681
+ return __privateMethod$2(this, _insertRecordWithoutId, insertRecordWithoutId_fn).call(this, a, columns);
1682
+ }
1683
+ throw new Error("Invalid arguments for create method");
1684
+ });
1185
1685
  }
1186
- async update(a, b) {
1187
- if (Array.isArray(a)) {
1188
- if (a.length > 100) {
1189
- console.warn("Bulk update operation is not optimized in the Xata API yet, this request might be slow");
1686
+ async read(a, b) {
1687
+ return __privateGet$4(this, _trace).call(this, "read", async () => {
1688
+ const columns = isStringArray(b) ? b : ["*"];
1689
+ if (Array.isArray(a)) {
1690
+ if (a.length === 0)
1691
+ return [];
1692
+ const ids = a.map((item) => extractId(item));
1693
+ const finalObjects = await this.getAll({ filter: { id: { $any: compact(ids) } }, columns });
1694
+ const dictionary = finalObjects.reduce((acc, object) => {
1695
+ acc[object.id] = object;
1696
+ return acc;
1697
+ }, {});
1698
+ return ids.map((id2) => dictionary[id2 ?? ""] ?? null);
1190
1699
  }
1191
- return Promise.all(a.map((object) => this.update(object)));
1192
- }
1193
- if (isString(a) && isObject(b)) {
1194
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a);
1195
- const record = await __privateMethod$2(this, _updateRecordWithID, updateRecordWithID_fn).call(this, a, b);
1196
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1197
- return record;
1198
- }
1199
- if (isObject(a) && isString(a.id)) {
1200
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a.id);
1201
- const record = await __privateMethod$2(this, _updateRecordWithID, updateRecordWithID_fn).call(this, a.id, { ...a, id: void 0 });
1202
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1203
- return record;
1204
- }
1205
- throw new Error("Invalid arguments for update method");
1700
+ const id = extractId(a);
1701
+ if (id) {
1702
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1703
+ try {
1704
+ const response = await getRecord({
1705
+ pathParams: {
1706
+ workspace: "{workspaceId}",
1707
+ dbBranchName: "{dbBranch}",
1708
+ tableName: __privateGet$4(this, _table),
1709
+ recordId: id
1710
+ },
1711
+ queryParams: { columns },
1712
+ ...fetchProps
1713
+ });
1714
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
1715
+ return initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), response, columns);
1716
+ } catch (e) {
1717
+ if (isObject(e) && e.status === 404) {
1718
+ return null;
1719
+ }
1720
+ throw e;
1721
+ }
1722
+ }
1723
+ return null;
1724
+ });
1206
1725
  }
1207
- async createOrUpdate(a, b) {
1208
- if (Array.isArray(a)) {
1209
- if (a.length > 100) {
1210
- console.warn("Bulk update operation is not optimized in the Xata API yet, this request might be slow");
1726
+ async readOrThrow(a, b) {
1727
+ return __privateGet$4(this, _trace).call(this, "readOrThrow", async () => {
1728
+ const result = await this.read(a, b);
1729
+ if (Array.isArray(result)) {
1730
+ const missingIds = compact(
1731
+ a.filter((_item, index) => result[index] === null).map((item) => extractId(item))
1732
+ );
1733
+ if (missingIds.length > 0) {
1734
+ throw new Error(`Could not find records with ids: ${missingIds.join(", ")}`);
1735
+ }
1736
+ return result;
1211
1737
  }
1212
- return Promise.all(a.map((object) => this.createOrUpdate(object)));
1213
- }
1214
- if (isString(a) && isObject(b)) {
1215
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a);
1216
- const record = await __privateMethod$2(this, _upsertRecordWithID, upsertRecordWithID_fn).call(this, a, b);
1217
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1218
- return record;
1219
- }
1220
- if (isObject(a) && isString(a.id)) {
1221
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a.id);
1222
- const record = await __privateMethod$2(this, _upsertRecordWithID, upsertRecordWithID_fn).call(this, a.id, { ...a, id: void 0 });
1223
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1224
- return record;
1225
- }
1226
- throw new Error("Invalid arguments for createOrUpdate method");
1738
+ if (result === null) {
1739
+ const id = extractId(a) ?? "unknown";
1740
+ throw new Error(`Record with id ${id} not found`);
1741
+ }
1742
+ return result;
1743
+ });
1227
1744
  }
1228
- async delete(a) {
1229
- if (Array.isArray(a)) {
1230
- if (a.length > 100) {
1231
- console.warn("Bulk delete operation is not optimized in the Xata API yet, this request might be slow");
1745
+ async update(a, b, c) {
1746
+ return __privateGet$4(this, _trace).call(this, "update", async () => {
1747
+ if (Array.isArray(a)) {
1748
+ if (a.length === 0)
1749
+ return [];
1750
+ if (a.length > 100) {
1751
+ console.warn("Bulk update operation is not optimized in the Xata API yet, this request might be slow");
1752
+ }
1753
+ const columns = isStringArray(b) ? b : ["*"];
1754
+ return Promise.all(a.map((object) => this.update(object, columns)));
1232
1755
  }
1233
- await Promise.all(a.map((id) => this.delete(id)));
1234
- return;
1235
- }
1236
- if (isString(a)) {
1237
- await __privateMethod$2(this, _deleteRecord, deleteRecord_fn).call(this, a);
1238
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a);
1239
- return;
1240
- }
1241
- if (isObject(a) && isString(a.id)) {
1242
- await __privateMethod$2(this, _deleteRecord, deleteRecord_fn).call(this, a.id);
1243
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a.id);
1244
- return;
1245
- }
1246
- throw new Error("Invalid arguments for delete method");
1756
+ if (isString(a) && isObject(b)) {
1757
+ const columns = isStringArray(c) ? c : void 0;
1758
+ return __privateMethod$2(this, _updateRecordWithID, updateRecordWithID_fn).call(this, a, b, columns);
1759
+ }
1760
+ if (isObject(a) && isString(a.id)) {
1761
+ const columns = isStringArray(b) ? b : void 0;
1762
+ return __privateMethod$2(this, _updateRecordWithID, updateRecordWithID_fn).call(this, a.id, { ...a, id: void 0 }, columns);
1763
+ }
1764
+ throw new Error("Invalid arguments for update method");
1765
+ });
1766
+ }
1767
+ async updateOrThrow(a, b, c) {
1768
+ return __privateGet$4(this, _trace).call(this, "updateOrThrow", async () => {
1769
+ const result = await this.update(a, b, c);
1770
+ if (Array.isArray(result)) {
1771
+ const missingIds = compact(
1772
+ a.filter((_item, index) => result[index] === null).map((item) => extractId(item))
1773
+ );
1774
+ if (missingIds.length > 0) {
1775
+ throw new Error(`Could not find records with ids: ${missingIds.join(", ")}`);
1776
+ }
1777
+ return result;
1778
+ }
1779
+ if (result === null) {
1780
+ const id = extractId(a) ?? "unknown";
1781
+ throw new Error(`Record with id ${id} not found`);
1782
+ }
1783
+ return result;
1784
+ });
1785
+ }
1786
+ async createOrUpdate(a, b, c) {
1787
+ return __privateGet$4(this, _trace).call(this, "createOrUpdate", async () => {
1788
+ if (Array.isArray(a)) {
1789
+ if (a.length === 0)
1790
+ return [];
1791
+ if (a.length > 100) {
1792
+ console.warn("Bulk update operation is not optimized in the Xata API yet, this request might be slow");
1793
+ }
1794
+ const columns = isStringArray(b) ? b : ["*"];
1795
+ return Promise.all(a.map((object) => this.createOrUpdate(object, columns)));
1796
+ }
1797
+ if (isString(a) && isObject(b)) {
1798
+ const columns = isStringArray(c) ? c : void 0;
1799
+ return __privateMethod$2(this, _upsertRecordWithID, upsertRecordWithID_fn).call(this, a, b, columns);
1800
+ }
1801
+ if (isObject(a) && isString(a.id)) {
1802
+ const columns = isStringArray(c) ? c : void 0;
1803
+ return __privateMethod$2(this, _upsertRecordWithID, upsertRecordWithID_fn).call(this, a.id, { ...a, id: void 0 }, columns);
1804
+ }
1805
+ throw new Error("Invalid arguments for createOrUpdate method");
1806
+ });
1807
+ }
1808
+ async delete(a, b) {
1809
+ return __privateGet$4(this, _trace).call(this, "delete", async () => {
1810
+ if (Array.isArray(a)) {
1811
+ if (a.length === 0)
1812
+ return [];
1813
+ if (a.length > 100) {
1814
+ console.warn("Bulk delete operation is not optimized in the Xata API yet, this request might be slow");
1815
+ }
1816
+ return Promise.all(a.map((id) => this.delete(id, b)));
1817
+ }
1818
+ if (isString(a)) {
1819
+ return __privateMethod$2(this, _deleteRecord, deleteRecord_fn).call(this, a, b);
1820
+ }
1821
+ if (isObject(a) && isString(a.id)) {
1822
+ return __privateMethod$2(this, _deleteRecord, deleteRecord_fn).call(this, a.id, b);
1823
+ }
1824
+ throw new Error("Invalid arguments for delete method");
1825
+ });
1826
+ }
1827
+ async deleteOrThrow(a, b) {
1828
+ return __privateGet$4(this, _trace).call(this, "deleteOrThrow", async () => {
1829
+ const result = await this.delete(a, b);
1830
+ if (Array.isArray(result)) {
1831
+ const missingIds = compact(
1832
+ a.filter((_item, index) => result[index] === null).map((item) => extractId(item))
1833
+ );
1834
+ if (missingIds.length > 0) {
1835
+ throw new Error(`Could not find records with ids: ${missingIds.join(", ")}`);
1836
+ }
1837
+ return result;
1838
+ } else if (result === null) {
1839
+ const id = extractId(a) ?? "unknown";
1840
+ throw new Error(`Record with id ${id} not found`);
1841
+ }
1842
+ return result;
1843
+ });
1247
1844
  }
1248
1845
  async search(query, options = {}) {
1249
- const fetchProps = await __privateGet$3(this, _getFetchProps).call(this);
1250
- const { records } = await searchBranch({
1251
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}" },
1252
- body: { tables: [__privateGet$3(this, _table)], query, fuzziness: options.fuzziness },
1253
- ...fetchProps
1846
+ return __privateGet$4(this, _trace).call(this, "search", async () => {
1847
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1848
+ const { records } = await searchTable({
1849
+ pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table) },
1850
+ body: {
1851
+ query,
1852
+ fuzziness: options.fuzziness,
1853
+ prefix: options.prefix,
1854
+ highlight: options.highlight,
1855
+ filter: options.filter,
1856
+ boosters: options.boosters
1857
+ },
1858
+ ...fetchProps
1859
+ });
1860
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
1861
+ return records.map((item) => initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), item, ["*"]));
1254
1862
  });
1255
- return records.map((item) => initObject(this.db, __privateGet$3(this, _links), __privateGet$3(this, _table), item));
1256
1863
  }
1257
1864
  async query(query) {
1258
- const cacheQuery = await __privateMethod$2(this, _getCacheQuery, getCacheQuery_fn).call(this, query);
1259
- if (cacheQuery)
1260
- return new Page(query, cacheQuery.meta, cacheQuery.records);
1261
- const data = query.getQueryOptions();
1262
- const body = {
1263
- filter: Object.values(data.filter ?? {}).some(Boolean) ? data.filter : void 0,
1264
- sort: data.sort ? buildSortFilter(data.sort) : void 0,
1265
- page: data.page,
1266
- columns: data.columns
1267
- };
1268
- const fetchProps = await __privateGet$3(this, _getFetchProps).call(this);
1269
- const { meta, records: objects } = await queryTable({
1270
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$3(this, _table) },
1271
- body,
1272
- ...fetchProps
1865
+ return __privateGet$4(this, _trace).call(this, "query", async () => {
1866
+ const cacheQuery = await __privateMethod$2(this, _getCacheQuery, getCacheQuery_fn).call(this, query);
1867
+ if (cacheQuery)
1868
+ return new Page(query, cacheQuery.meta, cacheQuery.records);
1869
+ const data = query.getQueryOptions();
1870
+ const body = {
1871
+ filter: cleanFilter(data.filter),
1872
+ sort: data.sort !== void 0 ? buildSortFilter(data.sort) : void 0,
1873
+ page: data.pagination,
1874
+ columns: data.columns
1875
+ };
1876
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1877
+ const { meta, records: objects } = await queryTable({
1878
+ pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table) },
1879
+ body,
1880
+ ...fetchProps
1881
+ });
1882
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
1883
+ const records = objects.map(
1884
+ (record) => initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), record, data.columns ?? ["*"])
1885
+ );
1886
+ await __privateMethod$2(this, _setCacheQuery, setCacheQuery_fn).call(this, query, meta, records);
1887
+ return new Page(query, meta, records);
1273
1888
  });
1274
- const records = objects.map((record) => initObject(this.db, __privateGet$3(this, _links), __privateGet$3(this, _table), record));
1275
- await __privateMethod$2(this, _setCacheQuery, setCacheQuery_fn).call(this, query, meta, records);
1276
- return new Page(query, meta, records);
1277
1889
  }
1278
1890
  }
1279
1891
  _table = new WeakMap();
1280
- _links = new WeakMap();
1281
1892
  _getFetchProps = new WeakMap();
1893
+ _db = new WeakMap();
1282
1894
  _cache = new WeakMap();
1895
+ _schemaTables$2 = new WeakMap();
1896
+ _trace = new WeakMap();
1283
1897
  _insertRecordWithoutId = new WeakSet();
1284
- insertRecordWithoutId_fn = async function(object) {
1285
- const fetchProps = await __privateGet$3(this, _getFetchProps).call(this);
1898
+ insertRecordWithoutId_fn = async function(object, columns = ["*"]) {
1899
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1286
1900
  const record = transformObjectLinks(object);
1287
1901
  const response = await insertRecord({
1288
1902
  pathParams: {
1289
1903
  workspace: "{workspaceId}",
1290
1904
  dbBranchName: "{dbBranch}",
1291
- tableName: __privateGet$3(this, _table)
1905
+ tableName: __privateGet$4(this, _table)
1292
1906
  },
1907
+ queryParams: { columns },
1293
1908
  body: record,
1294
1909
  ...fetchProps
1295
1910
  });
1296
- const finalObject = await this.read(response.id);
1297
- if (!finalObject) {
1298
- throw new Error("The server failed to save the record");
1299
- }
1300
- return finalObject;
1911
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
1912
+ return initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), response, columns);
1301
1913
  };
1302
1914
  _insertRecordWithId = new WeakSet();
1303
- insertRecordWithId_fn = async function(recordId, object) {
1304
- const fetchProps = await __privateGet$3(this, _getFetchProps).call(this);
1915
+ insertRecordWithId_fn = async function(recordId, object, columns = ["*"]) {
1916
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1305
1917
  const record = transformObjectLinks(object);
1306
1918
  const response = await insertRecordWithID({
1307
1919
  pathParams: {
1308
1920
  workspace: "{workspaceId}",
1309
1921
  dbBranchName: "{dbBranch}",
1310
- tableName: __privateGet$3(this, _table),
1922
+ tableName: __privateGet$4(this, _table),
1311
1923
  recordId
1312
1924
  },
1313
1925
  body: record,
1314
- queryParams: { createOnly: true },
1926
+ queryParams: { createOnly: true, columns },
1315
1927
  ...fetchProps
1316
1928
  });
1317
- const finalObject = await this.read(response.id);
1318
- if (!finalObject) {
1319
- throw new Error("The server failed to save the record");
1320
- }
1321
- return finalObject;
1929
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
1930
+ return initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), response, columns);
1322
1931
  };
1323
1932
  _bulkInsertTableRecords = new WeakSet();
1324
- bulkInsertTableRecords_fn = async function(objects) {
1325
- const fetchProps = await __privateGet$3(this, _getFetchProps).call(this);
1933
+ bulkInsertTableRecords_fn = async function(objects, columns = ["*"]) {
1934
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1326
1935
  const records = objects.map((object) => transformObjectLinks(object));
1327
1936
  const response = await bulkInsertTableRecords({
1328
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$3(this, _table) },
1937
+ pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table) },
1938
+ queryParams: { columns },
1329
1939
  body: { records },
1330
1940
  ...fetchProps
1331
1941
  });
1332
- const finalObjects = await this.any(...response.recordIDs.map((id) => this.filter("id", id))).getAll();
1333
- if (finalObjects.length !== objects.length) {
1334
- throw new Error("The server failed to save some records");
1942
+ if (!isResponseWithRecords(response)) {
1943
+ throw new Error("Request included columns but server didn't include them");
1335
1944
  }
1336
- return finalObjects;
1945
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
1946
+ return response.records?.map((item) => initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), item, columns));
1337
1947
  };
1338
1948
  _updateRecordWithID = new WeakSet();
1339
- updateRecordWithID_fn = async function(recordId, object) {
1340
- const fetchProps = await __privateGet$3(this, _getFetchProps).call(this);
1949
+ updateRecordWithID_fn = async function(recordId, object, columns = ["*"]) {
1950
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1341
1951
  const record = transformObjectLinks(object);
1342
- const response = await updateRecordWithID({
1343
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$3(this, _table), recordId },
1344
- body: record,
1345
- ...fetchProps
1346
- });
1347
- const item = await this.read(response.id);
1348
- if (!item)
1349
- throw new Error("The server failed to save the record");
1350
- return item;
1952
+ try {
1953
+ const response = await updateRecordWithID({
1954
+ pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table), recordId },
1955
+ queryParams: { columns },
1956
+ body: record,
1957
+ ...fetchProps
1958
+ });
1959
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
1960
+ return initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), response, columns);
1961
+ } catch (e) {
1962
+ if (isObject(e) && e.status === 404) {
1963
+ return null;
1964
+ }
1965
+ throw e;
1966
+ }
1351
1967
  };
1352
1968
  _upsertRecordWithID = new WeakSet();
1353
- upsertRecordWithID_fn = async function(recordId, object) {
1354
- const fetchProps = await __privateGet$3(this, _getFetchProps).call(this);
1969
+ upsertRecordWithID_fn = async function(recordId, object, columns = ["*"]) {
1970
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1355
1971
  const response = await upsertRecordWithID({
1356
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$3(this, _table), recordId },
1972
+ pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table), recordId },
1973
+ queryParams: { columns },
1357
1974
  body: object,
1358
1975
  ...fetchProps
1359
1976
  });
1360
- const item = await this.read(response.id);
1361
- if (!item)
1362
- throw new Error("The server failed to save the record");
1363
- return item;
1977
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
1978
+ return initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), response, columns);
1364
1979
  };
1365
1980
  _deleteRecord = new WeakSet();
1366
- deleteRecord_fn = async function(recordId) {
1367
- const fetchProps = await __privateGet$3(this, _getFetchProps).call(this);
1368
- await deleteRecord({
1369
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$3(this, _table), recordId },
1370
- ...fetchProps
1371
- });
1372
- };
1373
- _invalidateCache = new WeakSet();
1374
- invalidateCache_fn = async function(recordId) {
1375
- await __privateGet$3(this, _cache).delete(`rec_${__privateGet$3(this, _table)}:${recordId}`);
1376
- const cacheItems = await __privateGet$3(this, _cache).getAll();
1377
- const queries = Object.entries(cacheItems).filter(([key]) => key.startsWith("query_"));
1378
- for (const [key, value] of queries) {
1379
- const ids = getIds(value);
1380
- if (ids.includes(recordId))
1381
- await __privateGet$3(this, _cache).delete(key);
1981
+ deleteRecord_fn = async function(recordId, columns = ["*"]) {
1982
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1983
+ try {
1984
+ const response = await deleteRecord({
1985
+ pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table), recordId },
1986
+ queryParams: { columns },
1987
+ ...fetchProps
1988
+ });
1989
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
1990
+ return initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), response, columns);
1991
+ } catch (e) {
1992
+ if (isObject(e) && e.status === 404) {
1993
+ return null;
1994
+ }
1995
+ throw e;
1382
1996
  }
1383
1997
  };
1384
- _setCacheRecord = new WeakSet();
1385
- setCacheRecord_fn = async function(record) {
1386
- if (!__privateGet$3(this, _cache).cacheRecords)
1387
- return;
1388
- await __privateGet$3(this, _cache).set(`rec_${__privateGet$3(this, _table)}:${record.id}`, record);
1389
- };
1390
- _getCacheRecord = new WeakSet();
1391
- getCacheRecord_fn = async function(recordId) {
1392
- if (!__privateGet$3(this, _cache).cacheRecords)
1393
- return null;
1394
- return __privateGet$3(this, _cache).get(`rec_${__privateGet$3(this, _table)}:${recordId}`);
1395
- };
1396
1998
  _setCacheQuery = new WeakSet();
1397
1999
  setCacheQuery_fn = async function(query, meta, records) {
1398
- await __privateGet$3(this, _cache).set(`query_${__privateGet$3(this, _table)}:${query.key()}`, { date: new Date(), meta, records });
2000
+ await __privateGet$4(this, _cache).set(`query_${__privateGet$4(this, _table)}:${query.key()}`, { date: new Date(), meta, records });
1399
2001
  };
1400
2002
  _getCacheQuery = new WeakSet();
1401
2003
  getCacheQuery_fn = async function(query) {
1402
- const key = `query_${__privateGet$3(this, _table)}:${query.key()}`;
1403
- const result = await __privateGet$3(this, _cache).get(key);
2004
+ const key = `query_${__privateGet$4(this, _table)}:${query.key()}`;
2005
+ const result = await __privateGet$4(this, _cache).get(key);
1404
2006
  if (!result)
1405
2007
  return null;
1406
- const { cache: ttl = __privateGet$3(this, _cache).defaultQueryTTL } = query.getQueryOptions();
1407
- if (!ttl || ttl < 0)
1408
- return result;
2008
+ const { cache: ttl = __privateGet$4(this, _cache).defaultQueryTTL } = query.getQueryOptions();
2009
+ if (ttl < 0)
2010
+ return null;
1409
2011
  const hasExpired = result.date.getTime() + ttl < Date.now();
1410
2012
  return hasExpired ? null : result;
1411
2013
  };
2014
+ _getSchemaTables$1 = new WeakSet();
2015
+ getSchemaTables_fn$1 = async function() {
2016
+ if (__privateGet$4(this, _schemaTables$2))
2017
+ return __privateGet$4(this, _schemaTables$2);
2018
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
2019
+ const { schema } = await getBranchDetails({
2020
+ pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}" },
2021
+ ...fetchProps
2022
+ });
2023
+ __privateSet$4(this, _schemaTables$2, schema.tables);
2024
+ return schema.tables;
2025
+ };
1412
2026
  const transformObjectLinks = (object) => {
1413
2027
  return Object.entries(object).reduce((acc, [key, value]) => {
1414
2028
  if (key === "xata")
@@ -1416,47 +2030,105 @@ const transformObjectLinks = (object) => {
1416
2030
  return { ...acc, [key]: isIdentifiable(value) ? value.id : value };
1417
2031
  }, {});
1418
2032
  };
1419
- const initObject = (db, links, table, object) => {
2033
+ const initObject = (db, schemaTables, table, object, selectedColumns) => {
1420
2034
  const result = {};
1421
- Object.assign(result, object);
1422
- const tableLinks = links[table] || [];
1423
- for (const link of tableLinks) {
1424
- const [field, linkTable] = link;
1425
- const value = result[field];
1426
- if (value && isObject(value)) {
1427
- result[field] = initObject(db, links, linkTable, value);
2035
+ const { xata, ...rest } = object ?? {};
2036
+ Object.assign(result, rest);
2037
+ const { columns } = schemaTables.find(({ name }) => name === table) ?? {};
2038
+ if (!columns)
2039
+ console.error(`Table ${table} not found in schema`);
2040
+ for (const column of columns ?? []) {
2041
+ if (!isValidColumn(selectedColumns, column))
2042
+ continue;
2043
+ const value = result[column.name];
2044
+ switch (column.type) {
2045
+ case "datetime": {
2046
+ const date = value !== void 0 ? new Date(value) : void 0;
2047
+ if (date && isNaN(date.getTime())) {
2048
+ console.error(`Failed to parse date ${value} for field ${column.name}`);
2049
+ } else if (date) {
2050
+ result[column.name] = date;
2051
+ }
2052
+ break;
2053
+ }
2054
+ case "link": {
2055
+ const linkTable = column.link?.table;
2056
+ if (!linkTable) {
2057
+ console.error(`Failed to parse link for field ${column.name}`);
2058
+ } else if (isObject(value)) {
2059
+ const selectedLinkColumns = selectedColumns.reduce((acc, item) => {
2060
+ if (item === column.name) {
2061
+ return [...acc, "*"];
2062
+ }
2063
+ if (item.startsWith(`${column.name}.`)) {
2064
+ const [, ...path] = item.split(".");
2065
+ return [...acc, path.join(".")];
2066
+ }
2067
+ return acc;
2068
+ }, []);
2069
+ result[column.name] = initObject(db, schemaTables, linkTable, value, selectedLinkColumns);
2070
+ } else {
2071
+ result[column.name] = null;
2072
+ }
2073
+ break;
2074
+ }
2075
+ default:
2076
+ result[column.name] = value ?? null;
2077
+ if (column.notNull === true && value === null) {
2078
+ console.error(`Parse error, column ${column.name} is non nullable and value resolves null`);
2079
+ }
2080
+ break;
1428
2081
  }
1429
2082
  }
1430
- result.read = function() {
1431
- return db[table].read(result["id"]);
2083
+ result.read = function(columns2) {
2084
+ return db[table].read(result["id"], columns2);
1432
2085
  };
1433
- result.update = function(data) {
1434
- return db[table].update(result["id"], data);
2086
+ result.update = function(data, columns2) {
2087
+ return db[table].update(result["id"], data, columns2);
1435
2088
  };
1436
2089
  result.delete = function() {
1437
2090
  return db[table].delete(result["id"]);
1438
2091
  };
1439
- for (const prop of ["read", "update", "delete"]) {
2092
+ result.getMetadata = function() {
2093
+ return xata;
2094
+ };
2095
+ for (const prop of ["read", "update", "delete", "getMetadata"]) {
1440
2096
  Object.defineProperty(result, prop, { enumerable: false });
1441
2097
  }
1442
2098
  Object.freeze(result);
1443
2099
  return result;
1444
2100
  };
1445
- function getIds(value) {
1446
- if (Array.isArray(value)) {
1447
- return value.map((item) => getIds(item)).flat();
1448
- }
1449
- if (!isObject(value))
1450
- return [];
1451
- const nestedIds = Object.values(value).map((item) => getIds(item)).flat();
1452
- return isString(value.id) ? [value.id, ...nestedIds] : nestedIds;
2101
+ function isResponseWithRecords(value) {
2102
+ return isObject(value) && Array.isArray(value.records);
2103
+ }
2104
+ function extractId(value) {
2105
+ if (isString(value))
2106
+ return value;
2107
+ if (isObject(value) && isString(value.id))
2108
+ return value.id;
2109
+ return void 0;
2110
+ }
2111
+ function cleanFilter(filter) {
2112
+ if (!filter)
2113
+ return void 0;
2114
+ const values = Object.values(filter).filter(Boolean).filter((value) => Array.isArray(value) ? value.length > 0 : true);
2115
+ return values.length > 0 ? filter : void 0;
2116
+ }
2117
+ function isValidColumn(columns, column) {
2118
+ if (columns.includes("*"))
2119
+ return true;
2120
+ if (column.type === "link") {
2121
+ const linkColumns = columns.filter((item) => item.startsWith(column.name));
2122
+ return linkColumns.length > 0;
2123
+ }
2124
+ return columns.includes(column.name);
1453
2125
  }
1454
2126
 
1455
2127
  var __accessCheck$3 = (obj, member, msg) => {
1456
2128
  if (!member.has(obj))
1457
2129
  throw TypeError("Cannot " + msg);
1458
2130
  };
1459
- var __privateGet$2 = (obj, member, getter) => {
2131
+ var __privateGet$3 = (obj, member, getter) => {
1460
2132
  __accessCheck$3(obj, member, "read from private field");
1461
2133
  return getter ? getter.call(obj) : member.get(obj);
1462
2134
  };
@@ -1465,7 +2137,7 @@ var __privateAdd$3 = (obj, member, value) => {
1465
2137
  throw TypeError("Cannot add the same private member more than once");
1466
2138
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
1467
2139
  };
1468
- var __privateSet$1 = (obj, member, value, setter) => {
2140
+ var __privateSet$3 = (obj, member, value, setter) => {
1469
2141
  __accessCheck$3(obj, member, "write to private field");
1470
2142
  setter ? setter.call(obj, value) : member.set(obj, value);
1471
2143
  return value;
@@ -1474,46 +2146,52 @@ var _map;
1474
2146
  class SimpleCache {
1475
2147
  constructor(options = {}) {
1476
2148
  __privateAdd$3(this, _map, void 0);
1477
- __privateSet$1(this, _map, /* @__PURE__ */ new Map());
2149
+ __privateSet$3(this, _map, /* @__PURE__ */ new Map());
1478
2150
  this.capacity = options.max ?? 500;
1479
- this.cacheRecords = options.cacheRecords ?? true;
1480
2151
  this.defaultQueryTTL = options.defaultQueryTTL ?? 60 * 1e3;
1481
2152
  }
1482
2153
  async getAll() {
1483
- return Object.fromEntries(__privateGet$2(this, _map));
2154
+ return Object.fromEntries(__privateGet$3(this, _map));
1484
2155
  }
1485
2156
  async get(key) {
1486
- return __privateGet$2(this, _map).get(key) ?? null;
2157
+ return __privateGet$3(this, _map).get(key) ?? null;
1487
2158
  }
1488
2159
  async set(key, value) {
1489
2160
  await this.delete(key);
1490
- __privateGet$2(this, _map).set(key, value);
1491
- if (__privateGet$2(this, _map).size > this.capacity) {
1492
- const leastRecentlyUsed = __privateGet$2(this, _map).keys().next().value;
2161
+ __privateGet$3(this, _map).set(key, value);
2162
+ if (__privateGet$3(this, _map).size > this.capacity) {
2163
+ const leastRecentlyUsed = __privateGet$3(this, _map).keys().next().value;
1493
2164
  await this.delete(leastRecentlyUsed);
1494
2165
  }
1495
2166
  }
1496
2167
  async delete(key) {
1497
- __privateGet$2(this, _map).delete(key);
2168
+ __privateGet$3(this, _map).delete(key);
1498
2169
  }
1499
2170
  async clear() {
1500
- return __privateGet$2(this, _map).clear();
2171
+ return __privateGet$3(this, _map).clear();
1501
2172
  }
1502
2173
  }
1503
2174
  _map = new WeakMap();
1504
2175
 
1505
- const gt = (value) => ({ $gt: value });
1506
- const ge = (value) => ({ $ge: value });
1507
- const gte = (value) => ({ $ge: value });
1508
- const lt = (value) => ({ $lt: value });
1509
- const lte = (value) => ({ $le: value });
1510
- const le = (value) => ({ $le: value });
2176
+ const greaterThan = (value) => ({ $gt: value });
2177
+ const gt = greaterThan;
2178
+ const greaterThanEquals = (value) => ({ $ge: value });
2179
+ const greaterEquals = greaterThanEquals;
2180
+ const gte = greaterThanEquals;
2181
+ const ge = greaterThanEquals;
2182
+ const lessThan = (value) => ({ $lt: value });
2183
+ const lt = lessThan;
2184
+ const lessThanEquals = (value) => ({ $le: value });
2185
+ const lessEquals = lessThanEquals;
2186
+ const lte = lessThanEquals;
2187
+ const le = lessThanEquals;
1511
2188
  const exists = (column) => ({ $exists: column });
1512
2189
  const notExists = (column) => ({ $notExists: column });
1513
2190
  const startsWith = (value) => ({ $startsWith: value });
1514
2191
  const endsWith = (value) => ({ $endsWith: value });
1515
2192
  const pattern = (value) => ({ $pattern: value });
1516
2193
  const is = (value) => ({ $is: value });
2194
+ const equals = is;
1517
2195
  const isNot = (value) => ({ $isNot: value });
1518
2196
  const contains = (value) => ({ $contains: value });
1519
2197
  const includes = (value) => ({ $includes: value });
@@ -1525,7 +2203,7 @@ var __accessCheck$2 = (obj, member, msg) => {
1525
2203
  if (!member.has(obj))
1526
2204
  throw TypeError("Cannot " + msg);
1527
2205
  };
1528
- var __privateGet$1 = (obj, member, getter) => {
2206
+ var __privateGet$2 = (obj, member, getter) => {
1529
2207
  __accessCheck$2(obj, member, "read from private field");
1530
2208
  return getter ? getter.call(obj) : member.get(obj);
1531
2209
  };
@@ -1534,130 +2212,178 @@ var __privateAdd$2 = (obj, member, value) => {
1534
2212
  throw TypeError("Cannot add the same private member more than once");
1535
2213
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
1536
2214
  };
1537
- var _tables;
2215
+ var __privateSet$2 = (obj, member, value, setter) => {
2216
+ __accessCheck$2(obj, member, "write to private field");
2217
+ setter ? setter.call(obj, value) : member.set(obj, value);
2218
+ return value;
2219
+ };
2220
+ var _tables, _schemaTables$1;
1538
2221
  class SchemaPlugin extends XataPlugin {
1539
- constructor(links, tableNames) {
2222
+ constructor(schemaTables) {
1540
2223
  super();
1541
- this.links = links;
1542
- this.tableNames = tableNames;
1543
2224
  __privateAdd$2(this, _tables, {});
2225
+ __privateAdd$2(this, _schemaTables$1, void 0);
2226
+ __privateSet$2(this, _schemaTables$1, schemaTables);
1544
2227
  }
1545
2228
  build(pluginOptions) {
1546
- const links = this.links;
1547
- const db = new Proxy({}, {
1548
- get: (_target, table) => {
1549
- if (!isString(table))
1550
- throw new Error("Invalid table name");
1551
- if (!__privateGet$1(this, _tables)[table]) {
1552
- __privateGet$1(this, _tables)[table] = new RestRepository({ db, pluginOptions, table, links });
2229
+ const db = new Proxy(
2230
+ {},
2231
+ {
2232
+ get: (_target, table) => {
2233
+ if (!isString(table))
2234
+ throw new Error("Invalid table name");
2235
+ if (__privateGet$2(this, _tables)[table] === void 0) {
2236
+ __privateGet$2(this, _tables)[table] = new RestRepository({ db, pluginOptions, table, schemaTables: __privateGet$2(this, _schemaTables$1) });
2237
+ }
2238
+ return __privateGet$2(this, _tables)[table];
1553
2239
  }
1554
- return __privateGet$1(this, _tables)[table];
1555
2240
  }
1556
- });
1557
- for (const table of this.tableNames ?? []) {
1558
- db[table] = new RestRepository({ db, pluginOptions, table, links });
2241
+ );
2242
+ const tableNames = __privateGet$2(this, _schemaTables$1)?.map(({ name }) => name) ?? [];
2243
+ for (const table of tableNames) {
2244
+ db[table] = new RestRepository({ db, pluginOptions, table, schemaTables: __privateGet$2(this, _schemaTables$1) });
1559
2245
  }
1560
2246
  return db;
1561
2247
  }
1562
2248
  }
1563
2249
  _tables = new WeakMap();
2250
+ _schemaTables$1 = new WeakMap();
1564
2251
 
1565
2252
  var __accessCheck$1 = (obj, member, msg) => {
1566
2253
  if (!member.has(obj))
1567
2254
  throw TypeError("Cannot " + msg);
1568
2255
  };
2256
+ var __privateGet$1 = (obj, member, getter) => {
2257
+ __accessCheck$1(obj, member, "read from private field");
2258
+ return getter ? getter.call(obj) : member.get(obj);
2259
+ };
1569
2260
  var __privateAdd$1 = (obj, member, value) => {
1570
2261
  if (member.has(obj))
1571
2262
  throw TypeError("Cannot add the same private member more than once");
1572
2263
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
1573
2264
  };
2265
+ var __privateSet$1 = (obj, member, value, setter) => {
2266
+ __accessCheck$1(obj, member, "write to private field");
2267
+ setter ? setter.call(obj, value) : member.set(obj, value);
2268
+ return value;
2269
+ };
1574
2270
  var __privateMethod$1 = (obj, member, method) => {
1575
2271
  __accessCheck$1(obj, member, "access private method");
1576
2272
  return method;
1577
2273
  };
1578
- var _search, search_fn;
2274
+ var _schemaTables, _search, search_fn, _getSchemaTables, getSchemaTables_fn;
1579
2275
  class SearchPlugin extends XataPlugin {
1580
- constructor(db, links) {
2276
+ constructor(db, schemaTables) {
1581
2277
  super();
1582
2278
  this.db = db;
1583
- this.links = links;
1584
2279
  __privateAdd$1(this, _search);
2280
+ __privateAdd$1(this, _getSchemaTables);
2281
+ __privateAdd$1(this, _schemaTables, void 0);
2282
+ __privateSet$1(this, _schemaTables, schemaTables);
1585
2283
  }
1586
2284
  build({ getFetchProps }) {
1587
2285
  return {
1588
2286
  all: async (query, options = {}) => {
1589
2287
  const records = await __privateMethod$1(this, _search, search_fn).call(this, query, options, getFetchProps);
2288
+ const schemaTables = await __privateMethod$1(this, _getSchemaTables, getSchemaTables_fn).call(this, getFetchProps);
1590
2289
  return records.map((record) => {
1591
2290
  const { table = "orphan" } = record.xata;
1592
- return { table, record: initObject(this.db, this.links, table, record) };
2291
+ return { table, record: initObject(this.db, schemaTables, table, record, ["*"]) };
1593
2292
  });
1594
2293
  },
1595
2294
  byTable: async (query, options = {}) => {
1596
2295
  const records = await __privateMethod$1(this, _search, search_fn).call(this, query, options, getFetchProps);
2296
+ const schemaTables = await __privateMethod$1(this, _getSchemaTables, getSchemaTables_fn).call(this, getFetchProps);
1597
2297
  return records.reduce((acc, record) => {
1598
2298
  const { table = "orphan" } = record.xata;
1599
2299
  const items = acc[table] ?? [];
1600
- const item = initObject(this.db, this.links, table, record);
2300
+ const item = initObject(this.db, schemaTables, table, record, ["*"]);
1601
2301
  return { ...acc, [table]: [...items, item] };
1602
2302
  }, {});
1603
2303
  }
1604
2304
  };
1605
2305
  }
1606
2306
  }
2307
+ _schemaTables = new WeakMap();
1607
2308
  _search = new WeakSet();
1608
2309
  search_fn = async function(query, options, getFetchProps) {
1609
2310
  const fetchProps = await getFetchProps();
1610
- const { tables, fuzziness } = options ?? {};
2311
+ const { tables, fuzziness, highlight, prefix } = options ?? {};
1611
2312
  const { records } = await searchBranch({
1612
2313
  pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}" },
1613
- body: { tables, query, fuzziness },
2314
+ body: { tables, query, fuzziness, prefix, highlight },
1614
2315
  ...fetchProps
1615
2316
  });
1616
2317
  return records;
1617
2318
  };
2319
+ _getSchemaTables = new WeakSet();
2320
+ getSchemaTables_fn = async function(getFetchProps) {
2321
+ if (__privateGet$1(this, _schemaTables))
2322
+ return __privateGet$1(this, _schemaTables);
2323
+ const fetchProps = await getFetchProps();
2324
+ const { schema } = await getBranchDetails({
2325
+ pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}" },
2326
+ ...fetchProps
2327
+ });
2328
+ __privateSet$1(this, _schemaTables, schema.tables);
2329
+ return schema.tables;
2330
+ };
1618
2331
 
1619
2332
  const isBranchStrategyBuilder = (strategy) => {
1620
2333
  return typeof strategy === "function";
1621
2334
  };
1622
2335
 
1623
- const envBranchNames = [
1624
- "XATA_BRANCH",
1625
- "VERCEL_GIT_COMMIT_REF",
1626
- "CF_PAGES_BRANCH",
1627
- "BRANCH"
1628
- ];
1629
- const defaultBranch = "main";
1630
2336
  async function getCurrentBranchName(options) {
1631
- const env = await getBranchByEnvVariable();
1632
- if (env)
1633
- return env;
1634
- const branch = await getGitBranch();
1635
- if (!branch)
1636
- return defaultBranch;
1637
- const details = await getDatabaseBranch(branch, options);
1638
- if (details)
1639
- return branch;
1640
- return defaultBranch;
2337
+ const { branch, envBranch } = getEnvironment();
2338
+ if (branch) {
2339
+ const details = await getDatabaseBranch(branch, options);
2340
+ if (details)
2341
+ return branch;
2342
+ console.warn(`Branch ${branch} not found in Xata. Ignoring...`);
2343
+ }
2344
+ const gitBranch = envBranch || await getGitBranch();
2345
+ return resolveXataBranch(gitBranch, options);
1641
2346
  }
1642
2347
  async function getCurrentBranchDetails(options) {
1643
- const env = await getBranchByEnvVariable();
1644
- if (env)
1645
- return getDatabaseBranch(env, options);
1646
- const branch = await getGitBranch();
1647
- if (!branch)
1648
- return getDatabaseBranch(defaultBranch, options);
1649
- const details = await getDatabaseBranch(branch, options);
1650
- if (details)
1651
- return details;
1652
- return getDatabaseBranch(defaultBranch, options);
2348
+ const branch = await getCurrentBranchName(options);
2349
+ return getDatabaseBranch(branch, options);
2350
+ }
2351
+ async function resolveXataBranch(gitBranch, options) {
2352
+ const databaseURL = options?.databaseURL || getDatabaseURL();
2353
+ const apiKey = options?.apiKey || getAPIKey();
2354
+ if (!databaseURL)
2355
+ throw new Error(
2356
+ "A databaseURL was not defined. Either set the XATA_DATABASE_URL env variable or pass the argument explicitely"
2357
+ );
2358
+ if (!apiKey)
2359
+ throw new Error(
2360
+ "An API key was not defined. Either set the XATA_API_KEY env variable or pass the argument explicitely"
2361
+ );
2362
+ const [protocol, , host, , dbName] = databaseURL.split("/");
2363
+ const [workspace] = host.split(".");
2364
+ const { fallbackBranch } = getEnvironment();
2365
+ const { branch } = await resolveBranch({
2366
+ apiKey,
2367
+ apiUrl: databaseURL,
2368
+ fetchImpl: getFetchImplementation(options?.fetchImpl),
2369
+ workspacesApiUrl: `${protocol}//${host}`,
2370
+ pathParams: { dbName, workspace },
2371
+ queryParams: { gitBranch, fallbackBranch },
2372
+ trace: defaultTrace
2373
+ });
2374
+ return branch;
1653
2375
  }
1654
2376
  async function getDatabaseBranch(branch, options) {
1655
2377
  const databaseURL = options?.databaseURL || getDatabaseURL();
1656
2378
  const apiKey = options?.apiKey || getAPIKey();
1657
2379
  if (!databaseURL)
1658
- throw new Error("A databaseURL was not defined. Either set the XATA_DATABASE_URL env variable or pass the argument explicitely");
2380
+ throw new Error(
2381
+ "A databaseURL was not defined. Either set the XATA_DATABASE_URL env variable or pass the argument explicitely"
2382
+ );
1659
2383
  if (!apiKey)
1660
- throw new Error("An API key was not defined. Either set the XATA_API_KEY env variable or pass the argument explicitely");
2384
+ throw new Error(
2385
+ "An API key was not defined. Either set the XATA_API_KEY env variable or pass the argument explicitely"
2386
+ );
1661
2387
  const [protocol, , host, , database] = databaseURL.split("/");
1662
2388
  const [workspace] = host.split(".");
1663
2389
  const dbBranchName = `${database}:${branch}`;
@@ -1667,10 +2393,8 @@ async function getDatabaseBranch(branch, options) {
1667
2393
  apiUrl: databaseURL,
1668
2394
  fetchImpl: getFetchImplementation(options?.fetchImpl),
1669
2395
  workspacesApiUrl: `${protocol}//${host}`,
1670
- pathParams: {
1671
- dbBranchName,
1672
- workspace
1673
- }
2396
+ pathParams: { dbBranchName, workspace },
2397
+ trace: defaultTrace
1674
2398
  });
1675
2399
  } catch (err) {
1676
2400
  if (isObject(err) && err.status === 404)
@@ -1678,21 +2402,10 @@ async function getDatabaseBranch(branch, options) {
1678
2402
  throw err;
1679
2403
  }
1680
2404
  }
1681
- function getBranchByEnvVariable() {
1682
- for (const name of envBranchNames) {
1683
- const value = getEnvVariable(name);
1684
- if (value) {
1685
- return value;
1686
- }
1687
- }
1688
- try {
1689
- return XATA_BRANCH;
1690
- } catch (err) {
1691
- }
1692
- }
1693
2405
  function getDatabaseURL() {
1694
2406
  try {
1695
- return getEnvVariable("XATA_DATABASE_URL") ?? XATA_DATABASE_URL;
2407
+ const { databaseURL } = getEnvironment();
2408
+ return databaseURL;
1696
2409
  } catch (err) {
1697
2410
  return void 0;
1698
2411
  }
@@ -1721,24 +2434,27 @@ var __privateMethod = (obj, member, method) => {
1721
2434
  return method;
1722
2435
  };
1723
2436
  const buildClient = (plugins) => {
1724
- var _branch, _parseOptions, parseOptions_fn, _getFetchProps, getFetchProps_fn, _evaluateBranch, evaluateBranch_fn, _a;
2437
+ var _branch, _options, _parseOptions, parseOptions_fn, _getFetchProps, getFetchProps_fn, _evaluateBranch, evaluateBranch_fn, _a;
1725
2438
  return _a = class {
1726
- constructor(options = {}, links, tables) {
2439
+ constructor(options = {}, schemaTables) {
1727
2440
  __privateAdd(this, _parseOptions);
1728
2441
  __privateAdd(this, _getFetchProps);
1729
2442
  __privateAdd(this, _evaluateBranch);
1730
2443
  __privateAdd(this, _branch, void 0);
2444
+ __privateAdd(this, _options, void 0);
1731
2445
  const safeOptions = __privateMethod(this, _parseOptions, parseOptions_fn).call(this, options);
2446
+ __privateSet(this, _options, safeOptions);
1732
2447
  const pluginOptions = {
1733
2448
  getFetchProps: () => __privateMethod(this, _getFetchProps, getFetchProps_fn).call(this, safeOptions),
1734
- cache: safeOptions.cache
2449
+ cache: safeOptions.cache,
2450
+ trace: safeOptions.trace
1735
2451
  };
1736
- const db = new SchemaPlugin(links, tables).build(pluginOptions);
1737
- const search = new SearchPlugin(db, links ?? {}).build(pluginOptions);
2452
+ const db = new SchemaPlugin(schemaTables).build(pluginOptions);
2453
+ const search = new SearchPlugin(db, schemaTables).build(pluginOptions);
1738
2454
  this.db = db;
1739
2455
  this.search = search;
1740
2456
  for (const [key, namespace] of Object.entries(plugins ?? {})) {
1741
- if (!namespace)
2457
+ if (namespace === void 0)
1742
2458
  continue;
1743
2459
  const result = namespace.build(pluginOptions);
1744
2460
  if (result instanceof Promise) {
@@ -1750,22 +2466,26 @@ const buildClient = (plugins) => {
1750
2466
  }
1751
2467
  }
1752
2468
  }
1753
- }, _branch = new WeakMap(), _parseOptions = new WeakSet(), parseOptions_fn = function(options) {
2469
+ async getConfig() {
2470
+ const databaseURL = __privateGet(this, _options).databaseURL;
2471
+ const branch = await __privateGet(this, _options).branch();
2472
+ return { databaseURL, branch };
2473
+ }
2474
+ }, _branch = new WeakMap(), _options = new WeakMap(), _parseOptions = new WeakSet(), parseOptions_fn = function(options) {
1754
2475
  const fetch = getFetchImplementation(options?.fetch);
1755
2476
  const databaseURL = options?.databaseURL || getDatabaseURL();
1756
2477
  const apiKey = options?.apiKey || getAPIKey();
1757
- const cache = options?.cache ?? new SimpleCache({ cacheRecords: false, defaultQueryTTL: 0 });
1758
- const branch = async () => options?.branch ? await __privateMethod(this, _evaluateBranch, evaluateBranch_fn).call(this, options.branch) : await getCurrentBranchName({ apiKey, databaseURL, fetchImpl: options?.fetch });
1759
- if (!databaseURL || !apiKey) {
1760
- throw new Error("Options databaseURL and apiKey are required");
2478
+ const cache = options?.cache ?? new SimpleCache({ defaultQueryTTL: 0 });
2479
+ const trace = options?.trace ?? defaultTrace;
2480
+ const branch = async () => options?.branch !== void 0 ? await __privateMethod(this, _evaluateBranch, evaluateBranch_fn).call(this, options.branch) : await getCurrentBranchName({ apiKey, databaseURL, fetchImpl: options?.fetch });
2481
+ if (!apiKey) {
2482
+ throw new Error("Option apiKey is required");
1761
2483
  }
1762
- return { fetch, databaseURL, apiKey, branch, cache };
1763
- }, _getFetchProps = new WeakSet(), getFetchProps_fn = async function({
1764
- fetch,
1765
- apiKey,
1766
- databaseURL,
1767
- branch
1768
- }) {
2484
+ if (!databaseURL) {
2485
+ throw new Error("Option databaseURL is required");
2486
+ }
2487
+ return { fetch, databaseURL, apiKey, branch, cache, trace };
2488
+ }, _getFetchProps = new WeakSet(), getFetchProps_fn = async function({ fetch, apiKey, databaseURL, branch, trace }) {
1769
2489
  const branchValue = await __privateMethod(this, _evaluateBranch, evaluateBranch_fn).call(this, branch);
1770
2490
  if (!branchValue)
1771
2491
  throw new Error("Unable to resolve branch value");
@@ -1775,14 +2495,15 @@ const buildClient = (plugins) => {
1775
2495
  apiUrl: "",
1776
2496
  workspacesApiUrl: (path, params) => {
1777
2497
  const hasBranch = params.dbBranchName ?? params.branch;
1778
- const newPath = path.replace(/^\/db\/[^/]+/, hasBranch ? `:${branchValue}` : "");
2498
+ const newPath = path.replace(/^\/db\/[^/]+/, hasBranch !== void 0 ? `:${branchValue}` : "");
1779
2499
  return databaseURL + newPath;
1780
- }
2500
+ },
2501
+ trace
1781
2502
  };
1782
2503
  }, _evaluateBranch = new WeakSet(), evaluateBranch_fn = async function(param) {
1783
2504
  if (__privateGet(this, _branch))
1784
2505
  return __privateGet(this, _branch);
1785
- if (!param)
2506
+ if (param === void 0)
1786
2507
  return void 0;
1787
2508
  const strategies = Array.isArray(param) ? [...param] : [param];
1788
2509
  const evaluateBranch = async (strategy) => {
@@ -1800,6 +2521,88 @@ const buildClient = (plugins) => {
1800
2521
  class BaseClient extends buildClient() {
1801
2522
  }
1802
2523
 
2524
+ const META = "__";
2525
+ const VALUE = "___";
2526
+ class Serializer {
2527
+ constructor() {
2528
+ this.classes = {};
2529
+ }
2530
+ add(clazz) {
2531
+ this.classes[clazz.name] = clazz;
2532
+ }
2533
+ toJSON(data) {
2534
+ function visit(obj) {
2535
+ if (Array.isArray(obj))
2536
+ return obj.map(visit);
2537
+ const type = typeof obj;
2538
+ if (type === "undefined")
2539
+ return { [META]: "undefined" };
2540
+ if (type === "bigint")
2541
+ return { [META]: "bigint", [VALUE]: obj.toString() };
2542
+ if (obj === null || type !== "object")
2543
+ return obj;
2544
+ const constructor = obj.constructor;
2545
+ const o = { [META]: constructor.name };
2546
+ for (const [key, value] of Object.entries(obj)) {
2547
+ o[key] = visit(value);
2548
+ }
2549
+ if (constructor === Date)
2550
+ o[VALUE] = obj.toISOString();
2551
+ if (constructor === Map)
2552
+ o[VALUE] = Object.fromEntries(obj);
2553
+ if (constructor === Set)
2554
+ o[VALUE] = [...obj];
2555
+ return o;
2556
+ }
2557
+ return JSON.stringify(visit(data));
2558
+ }
2559
+ fromJSON(json) {
2560
+ return JSON.parse(json, (key, value) => {
2561
+ if (value && typeof value === "object" && !Array.isArray(value)) {
2562
+ const { [META]: clazz, [VALUE]: val, ...rest } = value;
2563
+ const constructor = this.classes[clazz];
2564
+ if (constructor) {
2565
+ return Object.assign(Object.create(constructor.prototype), rest);
2566
+ }
2567
+ if (clazz === "Date")
2568
+ return new Date(val);
2569
+ if (clazz === "Set")
2570
+ return new Set(val);
2571
+ if (clazz === "Map")
2572
+ return new Map(Object.entries(val));
2573
+ if (clazz === "bigint")
2574
+ return BigInt(val);
2575
+ if (clazz === "undefined")
2576
+ return void 0;
2577
+ return rest;
2578
+ }
2579
+ return value;
2580
+ });
2581
+ }
2582
+ }
2583
+ const defaultSerializer = new Serializer();
2584
+ const serialize = (data) => {
2585
+ return defaultSerializer.toJSON(data);
2586
+ };
2587
+ const deserialize = (json) => {
2588
+ return defaultSerializer.fromJSON(json);
2589
+ };
2590
+
2591
+ function buildWorkerRunner(config) {
2592
+ return function xataWorker(name, _worker) {
2593
+ return async (...args) => {
2594
+ const url = process.env.NODE_ENV === "development" ? `http://localhost:64749/${name}` : `https://dispatcher.xata.workers.dev/${config.workspace}/${config.worker}/${name}`;
2595
+ const result = await fetch(url, {
2596
+ method: "POST",
2597
+ headers: { "Content-Type": "application/json" },
2598
+ body: serialize({ args })
2599
+ });
2600
+ const text = await result.text();
2601
+ return deserialize(text);
2602
+ };
2603
+ };
2604
+ }
2605
+
1803
2606
  class XataError extends Error {
1804
2607
  constructor(message, status) {
1805
2608
  super(message);
@@ -1815,23 +2618,32 @@ exports.PAGINATION_MAX_OFFSET = PAGINATION_MAX_OFFSET;
1815
2618
  exports.PAGINATION_MAX_SIZE = PAGINATION_MAX_SIZE;
1816
2619
  exports.Page = Page;
1817
2620
  exports.Query = Query;
2621
+ exports.RecordArray = RecordArray;
1818
2622
  exports.Repository = Repository;
1819
2623
  exports.RestRepository = RestRepository;
1820
2624
  exports.SchemaPlugin = SchemaPlugin;
1821
2625
  exports.SearchPlugin = SearchPlugin;
2626
+ exports.Serializer = Serializer;
1822
2627
  exports.SimpleCache = SimpleCache;
1823
2628
  exports.XataApiClient = XataApiClient;
1824
2629
  exports.XataApiPlugin = XataApiPlugin;
1825
2630
  exports.XataError = XataError;
1826
2631
  exports.XataPlugin = XataPlugin;
1827
2632
  exports.acceptWorkspaceMemberInvite = acceptWorkspaceMemberInvite;
2633
+ exports.addGitBranchesEntry = addGitBranchesEntry;
1828
2634
  exports.addTableColumn = addTableColumn;
2635
+ exports.applyBranchSchemaEdit = applyBranchSchemaEdit;
1829
2636
  exports.buildClient = buildClient;
2637
+ exports.buildWorkerRunner = buildWorkerRunner;
1830
2638
  exports.bulkInsertTableRecords = bulkInsertTableRecords;
1831
2639
  exports.cancelWorkspaceMemberInvite = cancelWorkspaceMemberInvite;
2640
+ exports.compareBranchSchemas = compareBranchSchemas;
2641
+ exports.compareBranchWithUserSchema = compareBranchWithUserSchema;
2642
+ exports.compareMigrationRequest = compareMigrationRequest;
1832
2643
  exports.contains = contains;
1833
2644
  exports.createBranch = createBranch;
1834
2645
  exports.createDatabase = createDatabase;
2646
+ exports.createMigrationRequest = createMigrationRequest;
1835
2647
  exports.createTable = createTable;
1836
2648
  exports.createUserAPIKey = createUserAPIKey;
1837
2649
  exports.createWorkspace = createWorkspace;
@@ -1843,7 +2655,9 @@ exports.deleteTable = deleteTable;
1843
2655
  exports.deleteUser = deleteUser;
1844
2656
  exports.deleteUserAPIKey = deleteUserAPIKey;
1845
2657
  exports.deleteWorkspace = deleteWorkspace;
2658
+ exports.deserialize = deserialize;
1846
2659
  exports.endsWith = endsWith;
2660
+ exports.equals = equals;
1847
2661
  exports.executeBranchMigrationPlan = executeBranchMigrationPlan;
1848
2662
  exports.exists = exists;
1849
2663
  exports.ge = ge;
@@ -1853,12 +2667,17 @@ exports.getBranchList = getBranchList;
1853
2667
  exports.getBranchMetadata = getBranchMetadata;
1854
2668
  exports.getBranchMigrationHistory = getBranchMigrationHistory;
1855
2669
  exports.getBranchMigrationPlan = getBranchMigrationPlan;
2670
+ exports.getBranchSchemaHistory = getBranchSchemaHistory;
1856
2671
  exports.getBranchStats = getBranchStats;
1857
2672
  exports.getColumn = getColumn;
1858
2673
  exports.getCurrentBranchDetails = getCurrentBranchDetails;
1859
2674
  exports.getCurrentBranchName = getCurrentBranchName;
1860
2675
  exports.getDatabaseList = getDatabaseList;
2676
+ exports.getDatabaseMetadata = getDatabaseMetadata;
1861
2677
  exports.getDatabaseURL = getDatabaseURL;
2678
+ exports.getGitBranchesMapping = getGitBranchesMapping;
2679
+ exports.getMigrationRequest = getMigrationRequest;
2680
+ exports.getMigrationRequestIsMerged = getMigrationRequestIsMerged;
1862
2681
  exports.getRecord = getRecord;
1863
2682
  exports.getTableColumns = getTableColumns;
1864
2683
  exports.getTableSchema = getTableSchema;
@@ -1867,6 +2686,9 @@ exports.getUserAPIKeys = getUserAPIKeys;
1867
2686
  exports.getWorkspace = getWorkspace;
1868
2687
  exports.getWorkspaceMembersList = getWorkspaceMembersList;
1869
2688
  exports.getWorkspacesList = getWorkspacesList;
2689
+ exports.greaterEquals = greaterEquals;
2690
+ exports.greaterThan = greaterThan;
2691
+ exports.greaterThanEquals = greaterThanEquals;
1870
2692
  exports.gt = gt;
1871
2693
  exports.gte = gte;
1872
2694
  exports.includes = includes;
@@ -1877,27 +2699,44 @@ exports.insertRecord = insertRecord;
1877
2699
  exports.insertRecordWithID = insertRecordWithID;
1878
2700
  exports.inviteWorkspaceMember = inviteWorkspaceMember;
1879
2701
  exports.is = is;
2702
+ exports.isCursorPaginationOptions = isCursorPaginationOptions;
1880
2703
  exports.isIdentifiable = isIdentifiable;
1881
2704
  exports.isNot = isNot;
1882
2705
  exports.isXataRecord = isXataRecord;
1883
2706
  exports.le = le;
2707
+ exports.lessEquals = lessEquals;
2708
+ exports.lessThan = lessThan;
2709
+ exports.lessThanEquals = lessThanEquals;
2710
+ exports.listMigrationRequests = listMigrationRequests;
2711
+ exports.listMigrationRequestsCommits = listMigrationRequestsCommits;
1884
2712
  exports.lt = lt;
1885
2713
  exports.lte = lte;
2714
+ exports.mergeMigrationRequest = mergeMigrationRequest;
1886
2715
  exports.notExists = notExists;
1887
2716
  exports.operationsByTag = operationsByTag;
1888
2717
  exports.pattern = pattern;
2718
+ exports.previewBranchSchemaEdit = previewBranchSchemaEdit;
1889
2719
  exports.queryTable = queryTable;
2720
+ exports.removeGitBranchesEntry = removeGitBranchesEntry;
1890
2721
  exports.removeWorkspaceMember = removeWorkspaceMember;
1891
2722
  exports.resendWorkspaceMemberInvite = resendWorkspaceMemberInvite;
2723
+ exports.resolveBranch = resolveBranch;
1892
2724
  exports.searchBranch = searchBranch;
2725
+ exports.searchTable = searchTable;
2726
+ exports.serialize = serialize;
1893
2727
  exports.setTableSchema = setTableSchema;
1894
2728
  exports.startsWith = startsWith;
2729
+ exports.summarizeTable = summarizeTable;
1895
2730
  exports.updateBranchMetadata = updateBranchMetadata;
2731
+ exports.updateBranchSchema = updateBranchSchema;
1896
2732
  exports.updateColumn = updateColumn;
2733
+ exports.updateDatabaseMetadata = updateDatabaseMetadata;
2734
+ exports.updateMigrationRequest = updateMigrationRequest;
1897
2735
  exports.updateRecordWithID = updateRecordWithID;
1898
2736
  exports.updateTable = updateTable;
1899
2737
  exports.updateUser = updateUser;
1900
2738
  exports.updateWorkspace = updateWorkspace;
2739
+ exports.updateWorkspaceMemberInvite = updateWorkspaceMemberInvite;
1901
2740
  exports.updateWorkspaceMemberRole = updateWorkspaceMemberRole;
1902
2741
  exports.upsertRecordWithID = upsertRecordWithID;
1903
2742
  //# sourceMappingURL=index.cjs.map