@xata.io/client 0.0.0-alpha.vfd071d9 → 0.0.0-alpha.vfe4a947

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,48 @@
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
+ onError: () => {
29
+ return;
30
+ }
31
+ });
32
+ };
33
+ const TraceAttributes = {
34
+ VERSION: "xata.sdk.version",
35
+ TABLE: "xata.table",
36
+ HTTP_REQUEST_ID: "http.request_id",
37
+ HTTP_STATUS_CODE: "http.status_code",
38
+ HTTP_HOST: "http.host",
39
+ HTTP_SCHEME: "http.scheme",
40
+ HTTP_USER_AGENT: "http.user_agent",
41
+ HTTP_METHOD: "http.method",
42
+ HTTP_URL: "http.url",
43
+ HTTP_ROUTE: "http.route",
44
+ HTTP_TARGET: "http.target"
45
+ };
46
+
5
47
  function notEmpty(value) {
6
48
  return value !== null && value !== void 0;
7
49
  }
@@ -11,46 +53,101 @@ function compact(arr) {
11
53
  function isObject(value) {
12
54
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
13
55
  }
56
+ function isDefined(value) {
57
+ return value !== null && value !== void 0;
58
+ }
14
59
  function isString(value) {
15
- return value !== void 0 && value !== null && typeof value === "string";
60
+ return isDefined(value) && typeof value === "string";
61
+ }
62
+ function isStringArray(value) {
63
+ return isDefined(value) && Array.isArray(value) && value.every(isString);
16
64
  }
17
65
  function toBase64(value) {
18
66
  try {
19
67
  return btoa(value);
20
68
  } catch (err) {
21
- return Buffer.from(value).toString("base64");
69
+ const buf = Buffer;
70
+ return buf.from(value).toString("base64");
22
71
  }
23
72
  }
24
73
 
25
- function getEnvVariable(name) {
74
+ function getEnvironment() {
26
75
  try {
27
- if (isObject(process) && isString(process?.env?.[name])) {
28
- return process.env[name];
76
+ if (isObject(process) && isObject(process.env)) {
77
+ return {
78
+ apiKey: process.env.XATA_API_KEY ?? getGlobalApiKey(),
79
+ databaseURL: process.env.XATA_DATABASE_URL ?? getGlobalDatabaseURL(),
80
+ branch: process.env.XATA_BRANCH ?? getGlobalBranch(),
81
+ envBranch: process.env.VERCEL_GIT_COMMIT_REF ?? process.env.CF_PAGES_BRANCH ?? process.env.BRANCH,
82
+ fallbackBranch: process.env.XATA_FALLBACK_BRANCH ?? getGlobalFallbackBranch()
83
+ };
29
84
  }
30
85
  } catch (err) {
31
86
  }
32
87
  try {
33
- if (isObject(Deno) && isString(Deno?.env?.get(name))) {
34
- return Deno.env.get(name);
88
+ if (isObject(Deno) && isObject(Deno.env)) {
89
+ return {
90
+ apiKey: Deno.env.get("XATA_API_KEY") ?? getGlobalApiKey(),
91
+ databaseURL: Deno.env.get("XATA_DATABASE_URL") ?? getGlobalDatabaseURL(),
92
+ branch: Deno.env.get("XATA_BRANCH") ?? getGlobalBranch(),
93
+ envBranch: Deno.env.get("VERCEL_GIT_COMMIT_REF") ?? Deno.env.get("CF_PAGES_BRANCH") ?? Deno.env.get("BRANCH"),
94
+ fallbackBranch: Deno.env.get("XATA_FALLBACK_BRANCH") ?? getGlobalFallbackBranch()
95
+ };
35
96
  }
36
97
  } catch (err) {
37
98
  }
99
+ return {
100
+ apiKey: getGlobalApiKey(),
101
+ databaseURL: getGlobalDatabaseURL(),
102
+ branch: getGlobalBranch(),
103
+ envBranch: void 0,
104
+ fallbackBranch: getGlobalFallbackBranch()
105
+ };
106
+ }
107
+ function getGlobalApiKey() {
108
+ try {
109
+ return XATA_API_KEY;
110
+ } catch (err) {
111
+ return void 0;
112
+ }
113
+ }
114
+ function getGlobalDatabaseURL() {
115
+ try {
116
+ return XATA_DATABASE_URL;
117
+ } catch (err) {
118
+ return void 0;
119
+ }
120
+ }
121
+ function getGlobalBranch() {
122
+ try {
123
+ return XATA_BRANCH;
124
+ } catch (err) {
125
+ return void 0;
126
+ }
127
+ }
128
+ function getGlobalFallbackBranch() {
129
+ try {
130
+ return XATA_FALLBACK_BRANCH;
131
+ } catch (err) {
132
+ return void 0;
133
+ }
38
134
  }
39
135
  async function getGitBranch() {
136
+ const cmd = ["git", "branch", "--show-current"];
137
+ const fullCmd = cmd.join(" ");
138
+ const nodeModule = ["child", "process"].join("_");
139
+ const execOptions = { encoding: "utf-8", stdio: ["ignore", "pipe", "ignore"] };
40
140
  try {
41
141
  if (typeof require === "function") {
42
- const req = require;
43
- return req("child_process").execSync("git branch --show-current", { encoding: "utf-8" }).trim();
142
+ return require(nodeModule).execSync(fullCmd, execOptions).trim();
44
143
  }
144
+ const { execSync } = await (function (t) { return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require(t)); }); })(nodeModule);
145
+ return execSync(fullCmd, execOptions).toString().trim();
45
146
  } catch (err) {
46
147
  }
47
148
  try {
48
149
  if (isObject(Deno)) {
49
- const process2 = Deno.run({
50
- cmd: ["git", "branch", "--show-current"],
51
- stdout: "piped",
52
- stderr: "piped"
53
- });
150
+ const process2 = Deno.run({ cmd, stdout: "piped", stderr: "null" });
54
151
  return new TextDecoder().decode(await process2.output()).trim();
55
152
  }
56
153
  } catch (err) {
@@ -59,7 +156,8 @@ async function getGitBranch() {
59
156
 
60
157
  function getAPIKey() {
61
158
  try {
62
- return getEnvVariable("XATA_API_KEY") ?? XATA_API_KEY;
159
+ const { apiKey } = getEnvironment();
160
+ return apiKey;
63
161
  } catch (err) {
64
162
  return void 0;
65
163
  }
@@ -69,21 +167,35 @@ function getFetchImplementation(userFetch) {
69
167
  const globalFetch = typeof fetch !== "undefined" ? fetch : void 0;
70
168
  const fetchImpl = userFetch ?? globalFetch;
71
169
  if (!fetchImpl) {
72
- throw new Error(`The \`fetch\` option passed to the Xata client is resolving to a falsy value and may not be correctly imported.`);
170
+ throw new Error(
171
+ `The \`fetch\` option passed to the Xata client is resolving to a falsy value and may not be correctly imported.`
172
+ );
73
173
  }
74
174
  return fetchImpl;
75
175
  }
76
176
 
77
- class FetcherError extends Error {
78
- constructor(status, data) {
177
+ const VERSION = "0.0.0-alpha.vfe4a947";
178
+
179
+ class ErrorWithCause extends Error {
180
+ constructor(message, options) {
181
+ super(message, options);
182
+ }
183
+ }
184
+ class FetcherError extends ErrorWithCause {
185
+ constructor(status, data, requestId) {
79
186
  super(getMessage(data));
80
187
  this.status = status;
81
188
  this.errors = isBulkError(data) ? data.errors : void 0;
189
+ this.requestId = requestId;
82
190
  if (data instanceof Error) {
83
191
  this.stack = data.stack;
84
192
  this.cause = data.cause;
85
193
  }
86
194
  }
195
+ toString() {
196
+ const error = super.toString();
197
+ return `[${this.status}] (${this.requestId ?? "Unknown"}): ${error}`;
198
+ }
87
199
  }
88
200
  function isBulkError(error) {
89
201
  return isObject(error) && Array.isArray(error.errors);
@@ -106,7 +218,12 @@ function getMessage(data) {
106
218
  }
107
219
 
108
220
  const resolveUrl = (url, queryParams = {}, pathParams = {}) => {
109
- const query = new URLSearchParams(queryParams).toString();
221
+ const cleanQueryParams = Object.entries(queryParams).reduce((acc, [key, value]) => {
222
+ if (value === void 0 || value === null)
223
+ return acc;
224
+ return { ...acc, [key]: value };
225
+ }, {});
226
+ const query = new URLSearchParams(cleanQueryParams).toString();
110
227
  const queryString = query.length > 0 ? `?${query}` : "";
111
228
  return url.replace(/\{\w*\}/g, (key) => pathParams[key.slice(1, -1)]) + queryString;
112
229
  };
@@ -136,32 +253,62 @@ async function fetch$1({
136
253
  fetchImpl,
137
254
  apiKey,
138
255
  apiUrl,
139
- workspacesApiUrl
256
+ workspacesApiUrl,
257
+ trace
140
258
  }) {
141
- const baseUrl = buildBaseUrl({ path, workspacesApiUrl, pathParams, apiUrl });
142
- const fullUrl = resolveUrl(baseUrl, queryParams, pathParams);
143
- const url = fullUrl.includes("localhost") ? fullUrl.replace(/^[^.]+\./, "http://") : fullUrl;
144
- const response = await fetchImpl(url, {
145
- method: method.toUpperCase(),
146
- body: body ? JSON.stringify(body) : void 0,
147
- headers: {
148
- "Content-Type": "application/json",
149
- ...headers,
150
- ...hostHeader(fullUrl),
151
- Authorization: `Bearer ${apiKey}`
152
- }
153
- });
154
- if (response.status === 204) {
155
- return {};
156
- }
259
+ return trace(
260
+ `${method.toUpperCase()} ${path}`,
261
+ async ({ setAttributes, onError }) => {
262
+ const baseUrl = buildBaseUrl({ path, workspacesApiUrl, pathParams, apiUrl });
263
+ const fullUrl = resolveUrl(baseUrl, queryParams, pathParams);
264
+ const url = fullUrl.includes("localhost") ? fullUrl.replace(/^[^.]+\./, "http://") : fullUrl;
265
+ setAttributes({
266
+ [TraceAttributes.HTTP_URL]: url,
267
+ [TraceAttributes.HTTP_TARGET]: resolveUrl(path, queryParams, pathParams)
268
+ });
269
+ const response = await fetchImpl(url, {
270
+ method: method.toUpperCase(),
271
+ body: body ? JSON.stringify(body) : void 0,
272
+ headers: {
273
+ "Content-Type": "application/json",
274
+ "User-Agent": `Xata client-ts/${VERSION}`,
275
+ ...headers,
276
+ ...hostHeader(fullUrl),
277
+ Authorization: `Bearer ${apiKey}`
278
+ }
279
+ });
280
+ if (response.status === 204) {
281
+ return {};
282
+ }
283
+ const { host, protocol } = parseUrl(response.url);
284
+ const requestId = response.headers?.get("x-request-id") ?? void 0;
285
+ setAttributes({
286
+ [TraceAttributes.HTTP_REQUEST_ID]: requestId,
287
+ [TraceAttributes.HTTP_STATUS_CODE]: response.status,
288
+ [TraceAttributes.HTTP_HOST]: host,
289
+ [TraceAttributes.HTTP_SCHEME]: protocol?.replace(":", "")
290
+ });
291
+ try {
292
+ const jsonResponse = await response.json();
293
+ if (response.ok) {
294
+ return jsonResponse;
295
+ }
296
+ throw new FetcherError(response.status, jsonResponse, requestId);
297
+ } catch (error) {
298
+ const fetcherError = new FetcherError(response.status, error, requestId);
299
+ onError(fetcherError.message);
300
+ throw fetcherError;
301
+ }
302
+ },
303
+ { [TraceAttributes.HTTP_METHOD]: method.toUpperCase(), [TraceAttributes.HTTP_ROUTE]: path }
304
+ );
305
+ }
306
+ function parseUrl(url) {
157
307
  try {
158
- const jsonResponse = await response.json();
159
- if (response.ok) {
160
- return jsonResponse;
161
- }
162
- throw new FetcherError(response.status, jsonResponse);
308
+ const { host, protocol } = new URL(url);
309
+ return { host, protocol };
163
310
  } catch (error) {
164
- throw new FetcherError(response.status, error);
311
+ return {};
165
312
  }
166
313
  }
167
314
 
@@ -220,6 +367,7 @@ const removeWorkspaceMember = (variables) => fetch$1({
220
367
  ...variables
221
368
  });
222
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 });
223
371
  const cancelWorkspaceMemberInvite = (variables) => fetch$1({
224
372
  url: "/workspaces/{workspaceId}/invites/{inviteId}",
225
373
  method: "delete",
@@ -255,6 +403,11 @@ const deleteDatabase = (variables) => fetch$1({
255
403
  method: "delete",
256
404
  ...variables
257
405
  });
406
+ const getDatabaseMetadata = (variables) => fetch$1({
407
+ url: "/dbs/{dbName}/metadata",
408
+ method: "get",
409
+ ...variables
410
+ });
258
411
  const getGitBranchesMapping = (variables) => fetch$1({ url: "/dbs/{dbName}/gitBranches", method: "get", ...variables });
259
412
  const addGitBranchesEntry = (variables) => fetch$1({ url: "/dbs/{dbName}/gitBranches", method: "post", ...variables });
260
413
  const removeGitBranchesEntry = (variables) => fetch$1({ url: "/dbs/{dbName}/gitBranches", method: "delete", ...variables });
@@ -268,11 +421,7 @@ const getBranchDetails = (variables) => fetch$1({
268
421
  method: "get",
269
422
  ...variables
270
423
  });
271
- const createBranch = (variables) => fetch$1({
272
- url: "/db/{dbBranchName}",
273
- method: "put",
274
- ...variables
275
- });
424
+ const createBranch = (variables) => fetch$1({ url: "/db/{dbBranchName}", method: "put", ...variables });
276
425
  const deleteBranch = (variables) => fetch$1({
277
426
  url: "/db/{dbBranchName}",
278
427
  method: "delete",
@@ -346,11 +495,7 @@ const updateColumn = (variables) => fetch$1({
346
495
  method: "patch",
347
496
  ...variables
348
497
  });
349
- const insertRecord = (variables) => fetch$1({
350
- url: "/db/{dbBranchName}/tables/{tableName}/data",
351
- method: "post",
352
- ...variables
353
- });
498
+ const insertRecord = (variables) => fetch$1({ url: "/db/{dbBranchName}/tables/{tableName}/data", method: "post", ...variables });
354
499
  const insertRecordWithID = (variables) => fetch$1({ url: "/db/{dbBranchName}/tables/{tableName}/data/{recordId}", method: "put", ...variables });
355
500
  const updateRecordWithID = (variables) => fetch$1({ url: "/db/{dbBranchName}/tables/{tableName}/data/{recordId}", method: "patch", ...variables });
356
501
  const upsertRecordWithID = (variables) => fetch$1({ url: "/db/{dbBranchName}/tables/{tableName}/data/{recordId}", method: "post", ...variables });
@@ -370,6 +515,11 @@ const queryTable = (variables) => fetch$1({
370
515
  method: "post",
371
516
  ...variables
372
517
  });
518
+ const searchTable = (variables) => fetch$1({
519
+ url: "/db/{dbBranchName}/tables/{tableName}/search",
520
+ method: "post",
521
+ ...variables
522
+ });
373
523
  const searchBranch = (variables) => fetch$1({
374
524
  url: "/db/{dbBranchName}/search",
375
525
  method: "post",
@@ -387,6 +537,7 @@ const operationsByTag = {
387
537
  updateWorkspaceMemberRole,
388
538
  removeWorkspaceMember,
389
539
  inviteWorkspaceMember,
540
+ updateWorkspaceMemberInvite,
390
541
  cancelWorkspaceMemberInvite,
391
542
  resendWorkspaceMemberInvite,
392
543
  acceptWorkspaceMemberInvite
@@ -395,6 +546,7 @@ const operationsByTag = {
395
546
  getDatabaseList,
396
547
  createDatabase,
397
548
  deleteDatabase,
549
+ getDatabaseMetadata,
398
550
  getGitBranchesMapping,
399
551
  addGitBranchesEntry,
400
552
  removeGitBranchesEntry,
@@ -433,6 +585,7 @@ const operationsByTag = {
433
585
  getRecord,
434
586
  bulkInsertTableRecords,
435
587
  queryTable,
588
+ searchTable,
436
589
  searchBranch
437
590
  }
438
591
  };
@@ -466,7 +619,7 @@ var __accessCheck$7 = (obj, member, msg) => {
466
619
  if (!member.has(obj))
467
620
  throw TypeError("Cannot " + msg);
468
621
  };
469
- var __privateGet$6 = (obj, member, getter) => {
622
+ var __privateGet$7 = (obj, member, getter) => {
470
623
  __accessCheck$7(obj, member, "read from private field");
471
624
  return getter ? getter.call(obj) : member.get(obj);
472
625
  };
@@ -475,7 +628,7 @@ var __privateAdd$7 = (obj, member, value) => {
475
628
  throw TypeError("Cannot add the same private member more than once");
476
629
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
477
630
  };
478
- var __privateSet$5 = (obj, member, value, setter) => {
631
+ var __privateSet$7 = (obj, member, value, setter) => {
479
632
  __accessCheck$7(obj, member, "write to private field");
480
633
  setter ? setter.call(obj, value) : member.set(obj, value);
481
634
  return value;
@@ -486,46 +639,48 @@ class XataApiClient {
486
639
  __privateAdd$7(this, _extraProps, void 0);
487
640
  __privateAdd$7(this, _namespaces, {});
488
641
  const provider = options.host ?? "production";
489
- const apiKey = options?.apiKey ?? getAPIKey();
642
+ const apiKey = options.apiKey ?? getAPIKey();
643
+ const trace = options.trace ?? defaultTrace;
490
644
  if (!apiKey) {
491
645
  throw new Error("Could not resolve a valid apiKey");
492
646
  }
493
- __privateSet$5(this, _extraProps, {
647
+ __privateSet$7(this, _extraProps, {
494
648
  apiUrl: getHostUrl(provider, "main"),
495
649
  workspacesApiUrl: getHostUrl(provider, "workspaces"),
496
650
  fetchImpl: getFetchImplementation(options.fetch),
497
- apiKey
651
+ apiKey,
652
+ trace
498
653
  });
499
654
  }
500
655
  get user() {
501
- if (!__privateGet$6(this, _namespaces).user)
502
- __privateGet$6(this, _namespaces).user = new UserApi(__privateGet$6(this, _extraProps));
503
- return __privateGet$6(this, _namespaces).user;
656
+ if (!__privateGet$7(this, _namespaces).user)
657
+ __privateGet$7(this, _namespaces).user = new UserApi(__privateGet$7(this, _extraProps));
658
+ return __privateGet$7(this, _namespaces).user;
504
659
  }
505
660
  get workspaces() {
506
- if (!__privateGet$6(this, _namespaces).workspaces)
507
- __privateGet$6(this, _namespaces).workspaces = new WorkspaceApi(__privateGet$6(this, _extraProps));
508
- return __privateGet$6(this, _namespaces).workspaces;
661
+ if (!__privateGet$7(this, _namespaces).workspaces)
662
+ __privateGet$7(this, _namespaces).workspaces = new WorkspaceApi(__privateGet$7(this, _extraProps));
663
+ return __privateGet$7(this, _namespaces).workspaces;
509
664
  }
510
665
  get databases() {
511
- if (!__privateGet$6(this, _namespaces).databases)
512
- __privateGet$6(this, _namespaces).databases = new DatabaseApi(__privateGet$6(this, _extraProps));
513
- return __privateGet$6(this, _namespaces).databases;
666
+ if (!__privateGet$7(this, _namespaces).databases)
667
+ __privateGet$7(this, _namespaces).databases = new DatabaseApi(__privateGet$7(this, _extraProps));
668
+ return __privateGet$7(this, _namespaces).databases;
514
669
  }
515
670
  get branches() {
516
- if (!__privateGet$6(this, _namespaces).branches)
517
- __privateGet$6(this, _namespaces).branches = new BranchApi(__privateGet$6(this, _extraProps));
518
- return __privateGet$6(this, _namespaces).branches;
671
+ if (!__privateGet$7(this, _namespaces).branches)
672
+ __privateGet$7(this, _namespaces).branches = new BranchApi(__privateGet$7(this, _extraProps));
673
+ return __privateGet$7(this, _namespaces).branches;
519
674
  }
520
675
  get tables() {
521
- if (!__privateGet$6(this, _namespaces).tables)
522
- __privateGet$6(this, _namespaces).tables = new TableApi(__privateGet$6(this, _extraProps));
523
- return __privateGet$6(this, _namespaces).tables;
676
+ if (!__privateGet$7(this, _namespaces).tables)
677
+ __privateGet$7(this, _namespaces).tables = new TableApi(__privateGet$7(this, _extraProps));
678
+ return __privateGet$7(this, _namespaces).tables;
524
679
  }
525
680
  get records() {
526
- if (!__privateGet$6(this, _namespaces).records)
527
- __privateGet$6(this, _namespaces).records = new RecordsApi(__privateGet$6(this, _extraProps));
528
- return __privateGet$6(this, _namespaces).records;
681
+ if (!__privateGet$7(this, _namespaces).records)
682
+ __privateGet$7(this, _namespaces).records = new RecordsApi(__privateGet$7(this, _extraProps));
683
+ return __privateGet$7(this, _namespaces).records;
529
684
  }
530
685
  }
531
686
  _extraProps = new WeakMap();
@@ -617,6 +772,13 @@ class WorkspaceApi {
617
772
  ...this.extraProps
618
773
  });
619
774
  }
775
+ updateWorkspaceMemberInvite(workspaceId, inviteId, role) {
776
+ return operationsByTag.workspaces.updateWorkspaceMemberInvite({
777
+ pathParams: { workspaceId, inviteId },
778
+ body: { role },
779
+ ...this.extraProps
780
+ });
781
+ }
620
782
  cancelWorkspaceMemberInvite(workspaceId, inviteId) {
621
783
  return operationsByTag.workspaces.cancelWorkspaceMemberInvite({
622
784
  pathParams: { workspaceId, inviteId },
@@ -659,6 +821,12 @@ class DatabaseApi {
659
821
  ...this.extraProps
660
822
  });
661
823
  }
824
+ getDatabaseMetadata(workspace, dbName) {
825
+ return operationsByTag.database.getDatabaseMetadata({
826
+ pathParams: { workspace, dbName },
827
+ ...this.extraProps
828
+ });
829
+ }
662
830
  getGitBranchesMapping(workspace, dbName) {
663
831
  return operationsByTag.database.getGitBranchesMapping({
664
832
  pathParams: { workspace, dbName },
@@ -679,10 +847,10 @@ class DatabaseApi {
679
847
  ...this.extraProps
680
848
  });
681
849
  }
682
- resolveBranch(workspace, dbName, gitBranch) {
850
+ resolveBranch(workspace, dbName, gitBranch, fallbackBranch) {
683
851
  return operationsByTag.database.resolveBranch({
684
852
  pathParams: { workspace, dbName },
685
- queryParams: { gitBranch },
853
+ queryParams: { gitBranch, fallbackBranch },
686
854
  ...this.extraProps
687
855
  });
688
856
  }
@@ -703,10 +871,10 @@ class BranchApi {
703
871
  ...this.extraProps
704
872
  });
705
873
  }
706
- createBranch(workspace, database, branch, from = "", options = {}) {
874
+ createBranch(workspace, database, branch, from, options = {}) {
707
875
  return operationsByTag.branch.createBranch({
708
876
  pathParams: { workspace, dbBranchName: `${database}:${branch}` },
709
- queryParams: { from },
877
+ queryParams: isString(from) ? { from } : void 0,
710
878
  body: options,
711
879
  ...this.extraProps
712
880
  });
@@ -831,9 +999,10 @@ class RecordsApi {
831
999
  constructor(extraProps) {
832
1000
  this.extraProps = extraProps;
833
1001
  }
834
- insertRecord(workspace, database, branch, tableName, record) {
1002
+ insertRecord(workspace, database, branch, tableName, record, options = {}) {
835
1003
  return operationsByTag.records.insertRecord({
836
1004
  pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },
1005
+ queryParams: options,
837
1006
  body: record,
838
1007
  ...this.extraProps
839
1008
  });
@@ -862,21 +1031,24 @@ class RecordsApi {
862
1031
  ...this.extraProps
863
1032
  });
864
1033
  }
865
- deleteRecord(workspace, database, branch, tableName, recordId) {
1034
+ deleteRecord(workspace, database, branch, tableName, recordId, options = {}) {
866
1035
  return operationsByTag.records.deleteRecord({
867
1036
  pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, recordId },
1037
+ queryParams: options,
868
1038
  ...this.extraProps
869
1039
  });
870
1040
  }
871
1041
  getRecord(workspace, database, branch, tableName, recordId, options = {}) {
872
1042
  return operationsByTag.records.getRecord({
873
1043
  pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, recordId },
1044
+ queryParams: options,
874
1045
  ...this.extraProps
875
1046
  });
876
1047
  }
877
- bulkInsertTableRecords(workspace, database, branch, tableName, records) {
1048
+ bulkInsertTableRecords(workspace, database, branch, tableName, records, options = {}) {
878
1049
  return operationsByTag.records.bulkInsertTableRecords({
879
1050
  pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },
1051
+ queryParams: options,
880
1052
  body: { records },
881
1053
  ...this.extraProps
882
1054
  });
@@ -888,6 +1060,13 @@ class RecordsApi {
888
1060
  ...this.extraProps
889
1061
  });
890
1062
  }
1063
+ searchTable(workspace, database, branch, tableName, query) {
1064
+ return operationsByTag.records.searchTable({
1065
+ pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },
1066
+ body: query,
1067
+ ...this.extraProps
1068
+ });
1069
+ }
891
1070
  searchBranch(workspace, database, branch, query) {
892
1071
  return operationsByTag.records.searchBranch({
893
1072
  pathParams: { workspace, dbBranchName: `${database}:${branch}` },
@@ -911,7 +1090,7 @@ var __accessCheck$6 = (obj, member, msg) => {
911
1090
  if (!member.has(obj))
912
1091
  throw TypeError("Cannot " + msg);
913
1092
  };
914
- var __privateGet$5 = (obj, member, getter) => {
1093
+ var __privateGet$6 = (obj, member, getter) => {
915
1094
  __accessCheck$6(obj, member, "read from private field");
916
1095
  return getter ? getter.call(obj) : member.get(obj);
917
1096
  };
@@ -920,30 +1099,30 @@ var __privateAdd$6 = (obj, member, value) => {
920
1099
  throw TypeError("Cannot add the same private member more than once");
921
1100
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
922
1101
  };
923
- var __privateSet$4 = (obj, member, value, setter) => {
1102
+ var __privateSet$6 = (obj, member, value, setter) => {
924
1103
  __accessCheck$6(obj, member, "write to private field");
925
1104
  setter ? setter.call(obj, value) : member.set(obj, value);
926
1105
  return value;
927
1106
  };
928
- var _query;
1107
+ var _query, _page;
929
1108
  class Page {
930
1109
  constructor(query, meta, records = []) {
931
1110
  __privateAdd$6(this, _query, void 0);
932
- __privateSet$4(this, _query, query);
1111
+ __privateSet$6(this, _query, query);
933
1112
  this.meta = meta;
934
- this.records = records;
1113
+ this.records = new RecordArray(this, records);
935
1114
  }
936
1115
  async nextPage(size, offset) {
937
- return __privateGet$5(this, _query).getPaginated({ page: { size, offset, after: this.meta.page.cursor } });
1116
+ return __privateGet$6(this, _query).getPaginated({ pagination: { size, offset, after: this.meta.page.cursor } });
938
1117
  }
939
1118
  async previousPage(size, offset) {
940
- return __privateGet$5(this, _query).getPaginated({ page: { size, offset, before: this.meta.page.cursor } });
1119
+ return __privateGet$6(this, _query).getPaginated({ pagination: { size, offset, before: this.meta.page.cursor } });
941
1120
  }
942
1121
  async firstPage(size, offset) {
943
- return __privateGet$5(this, _query).getPaginated({ page: { size, offset, first: this.meta.page.cursor } });
1122
+ return __privateGet$6(this, _query).getPaginated({ pagination: { size, offset, first: this.meta.page.cursor } });
944
1123
  }
945
1124
  async lastPage(size, offset) {
946
- return __privateGet$5(this, _query).getPaginated({ page: { size, offset, last: this.meta.page.cursor } });
1125
+ return __privateGet$6(this, _query).getPaginated({ pagination: { size, offset, last: this.meta.page.cursor } });
947
1126
  }
948
1127
  hasNextPage() {
949
1128
  return this.meta.page.more;
@@ -951,15 +1130,62 @@ class Page {
951
1130
  }
952
1131
  _query = new WeakMap();
953
1132
  const PAGINATION_MAX_SIZE = 200;
954
- const PAGINATION_DEFAULT_SIZE = 200;
1133
+ const PAGINATION_DEFAULT_SIZE = 20;
955
1134
  const PAGINATION_MAX_OFFSET = 800;
956
1135
  const PAGINATION_DEFAULT_OFFSET = 0;
1136
+ function isCursorPaginationOptions(options) {
1137
+ return isDefined(options) && (isDefined(options.first) || isDefined(options.last) || isDefined(options.after) || isDefined(options.before));
1138
+ }
1139
+ const _RecordArray = class extends Array {
1140
+ constructor(...args) {
1141
+ super(..._RecordArray.parseConstructorParams(...args));
1142
+ __privateAdd$6(this, _page, void 0);
1143
+ __privateSet$6(this, _page, isObject(args[0]?.meta) ? args[0] : { meta: { page: { cursor: "", more: false } }, records: [] });
1144
+ }
1145
+ static parseConstructorParams(...args) {
1146
+ if (args.length === 1 && typeof args[0] === "number") {
1147
+ return new Array(args[0]);
1148
+ }
1149
+ if (args.length <= 2 && isObject(args[0]?.meta) && Array.isArray(args[1] ?? [])) {
1150
+ const result = args[1] ?? args[0].records ?? [];
1151
+ return new Array(...result);
1152
+ }
1153
+ return new Array(...args);
1154
+ }
1155
+ toArray() {
1156
+ return new Array(...this);
1157
+ }
1158
+ map(callbackfn, thisArg) {
1159
+ return this.toArray().map(callbackfn, thisArg);
1160
+ }
1161
+ async nextPage(size, offset) {
1162
+ const newPage = await __privateGet$6(this, _page).nextPage(size, offset);
1163
+ return new _RecordArray(newPage);
1164
+ }
1165
+ async previousPage(size, offset) {
1166
+ const newPage = await __privateGet$6(this, _page).previousPage(size, offset);
1167
+ return new _RecordArray(newPage);
1168
+ }
1169
+ async firstPage(size, offset) {
1170
+ const newPage = await __privateGet$6(this, _page).firstPage(size, offset);
1171
+ return new _RecordArray(newPage);
1172
+ }
1173
+ async lastPage(size, offset) {
1174
+ const newPage = await __privateGet$6(this, _page).lastPage(size, offset);
1175
+ return new _RecordArray(newPage);
1176
+ }
1177
+ hasNextPage() {
1178
+ return __privateGet$6(this, _page).meta.page.more;
1179
+ }
1180
+ };
1181
+ let RecordArray = _RecordArray;
1182
+ _page = new WeakMap();
957
1183
 
958
1184
  var __accessCheck$5 = (obj, member, msg) => {
959
1185
  if (!member.has(obj))
960
1186
  throw TypeError("Cannot " + msg);
961
1187
  };
962
- var __privateGet$4 = (obj, member, getter) => {
1188
+ var __privateGet$5 = (obj, member, getter) => {
963
1189
  __accessCheck$5(obj, member, "read from private field");
964
1190
  return getter ? getter.call(obj) : member.get(obj);
965
1191
  };
@@ -968,34 +1194,35 @@ var __privateAdd$5 = (obj, member, value) => {
968
1194
  throw TypeError("Cannot add the same private member more than once");
969
1195
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
970
1196
  };
971
- var __privateSet$3 = (obj, member, value, setter) => {
1197
+ var __privateSet$5 = (obj, member, value, setter) => {
972
1198
  __accessCheck$5(obj, member, "write to private field");
973
1199
  setter ? setter.call(obj, value) : member.set(obj, value);
974
1200
  return value;
975
1201
  };
976
1202
  var _table$1, _repository, _data;
977
1203
  const _Query = class {
978
- constructor(repository, table, data, parent) {
1204
+ constructor(repository, table, data, rawParent) {
979
1205
  __privateAdd$5(this, _table$1, void 0);
980
1206
  __privateAdd$5(this, _repository, void 0);
981
1207
  __privateAdd$5(this, _data, { filter: {} });
982
1208
  this.meta = { page: { cursor: "start", more: true } };
983
- this.records = [];
984
- __privateSet$3(this, _table$1, table);
1209
+ this.records = new RecordArray(this, []);
1210
+ __privateSet$5(this, _table$1, table);
985
1211
  if (repository) {
986
- __privateSet$3(this, _repository, repository);
1212
+ __privateSet$5(this, _repository, repository);
987
1213
  } else {
988
- __privateSet$3(this, _repository, this);
1214
+ __privateSet$5(this, _repository, this);
989
1215
  }
990
- __privateGet$4(this, _data).filter = data.filter ?? parent?.filter ?? {};
991
- __privateGet$4(this, _data).filter.$any = data.filter?.$any ?? parent?.filter?.$any;
992
- __privateGet$4(this, _data).filter.$all = data.filter?.$all ?? parent?.filter?.$all;
993
- __privateGet$4(this, _data).filter.$not = data.filter?.$not ?? parent?.filter?.$not;
994
- __privateGet$4(this, _data).filter.$none = data.filter?.$none ?? parent?.filter?.$none;
995
- __privateGet$4(this, _data).sort = data.sort ?? parent?.sort;
996
- __privateGet$4(this, _data).columns = data.columns ?? parent?.columns ?? ["*"];
997
- __privateGet$4(this, _data).page = data.page ?? parent?.page;
998
- __privateGet$4(this, _data).cache = data.cache ?? parent?.cache;
1216
+ const parent = cleanParent(data, rawParent);
1217
+ __privateGet$5(this, _data).filter = data.filter ?? parent?.filter ?? {};
1218
+ __privateGet$5(this, _data).filter.$any = data.filter?.$any ?? parent?.filter?.$any;
1219
+ __privateGet$5(this, _data).filter.$all = data.filter?.$all ?? parent?.filter?.$all;
1220
+ __privateGet$5(this, _data).filter.$not = data.filter?.$not ?? parent?.filter?.$not;
1221
+ __privateGet$5(this, _data).filter.$none = data.filter?.$none ?? parent?.filter?.$none;
1222
+ __privateGet$5(this, _data).sort = data.sort ?? parent?.sort;
1223
+ __privateGet$5(this, _data).columns = data.columns ?? parent?.columns ?? ["*"];
1224
+ __privateGet$5(this, _data).pagination = data.pagination ?? parent?.pagination;
1225
+ __privateGet$5(this, _data).cache = data.cache ?? parent?.cache;
999
1226
  this.any = this.any.bind(this);
1000
1227
  this.all = this.all.bind(this);
1001
1228
  this.not = this.not.bind(this);
@@ -1006,83 +1233,93 @@ const _Query = class {
1006
1233
  Object.defineProperty(this, "repository", { enumerable: false });
1007
1234
  }
1008
1235
  getQueryOptions() {
1009
- return __privateGet$4(this, _data);
1236
+ return __privateGet$5(this, _data);
1010
1237
  }
1011
1238
  key() {
1012
- const { columns = [], filter = {}, sort = [], page = {} } = __privateGet$4(this, _data);
1013
- const key = JSON.stringify({ columns, filter, sort, page });
1239
+ const { columns = [], filter = {}, sort = [], pagination = {} } = __privateGet$5(this, _data);
1240
+ const key = JSON.stringify({ columns, filter, sort, pagination });
1014
1241
  return toBase64(key);
1015
1242
  }
1016
1243
  any(...queries) {
1017
1244
  const $any = queries.map((query) => query.getQueryOptions().filter ?? {});
1018
- return new _Query(__privateGet$4(this, _repository), __privateGet$4(this, _table$1), { filter: { $any } }, __privateGet$4(this, _data));
1245
+ return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { filter: { $any } }, __privateGet$5(this, _data));
1019
1246
  }
1020
1247
  all(...queries) {
1021
1248
  const $all = queries.map((query) => query.getQueryOptions().filter ?? {});
1022
- return new _Query(__privateGet$4(this, _repository), __privateGet$4(this, _table$1), { filter: { $all } }, __privateGet$4(this, _data));
1249
+ return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { filter: { $all } }, __privateGet$5(this, _data));
1023
1250
  }
1024
1251
  not(...queries) {
1025
1252
  const $not = queries.map((query) => query.getQueryOptions().filter ?? {});
1026
- return new _Query(__privateGet$4(this, _repository), __privateGet$4(this, _table$1), { filter: { $not } }, __privateGet$4(this, _data));
1253
+ return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { filter: { $not } }, __privateGet$5(this, _data));
1027
1254
  }
1028
1255
  none(...queries) {
1029
1256
  const $none = queries.map((query) => query.getQueryOptions().filter ?? {});
1030
- return new _Query(__privateGet$4(this, _repository), __privateGet$4(this, _table$1), { filter: { $none } }, __privateGet$4(this, _data));
1257
+ return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { filter: { $none } }, __privateGet$5(this, _data));
1031
1258
  }
1032
1259
  filter(a, b) {
1033
1260
  if (arguments.length === 1) {
1034
1261
  const constraints = Object.entries(a).map(([column, constraint]) => ({ [column]: constraint }));
1035
- const $all = compact([__privateGet$4(this, _data).filter?.$all].flat().concat(constraints));
1036
- return new _Query(__privateGet$4(this, _repository), __privateGet$4(this, _table$1), { filter: { $all } }, __privateGet$4(this, _data));
1262
+ const $all = compact([__privateGet$5(this, _data).filter?.$all].flat().concat(constraints));
1263
+ return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { filter: { $all } }, __privateGet$5(this, _data));
1037
1264
  } else {
1038
- const $all = compact([__privateGet$4(this, _data).filter?.$all].flat().concat([{ [a]: b }]));
1039
- return new _Query(__privateGet$4(this, _repository), __privateGet$4(this, _table$1), { filter: { $all } }, __privateGet$4(this, _data));
1265
+ const $all = compact([__privateGet$5(this, _data).filter?.$all].flat().concat([{ [a]: b }]));
1266
+ return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { filter: { $all } }, __privateGet$5(this, _data));
1040
1267
  }
1041
1268
  }
1042
- sort(column, direction) {
1043
- const originalSort = [__privateGet$4(this, _data).sort ?? []].flat();
1269
+ sort(column, direction = "asc") {
1270
+ const originalSort = [__privateGet$5(this, _data).sort ?? []].flat();
1044
1271
  const sort = [...originalSort, { column, direction }];
1045
- return new _Query(__privateGet$4(this, _repository), __privateGet$4(this, _table$1), { sort }, __privateGet$4(this, _data));
1272
+ return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { sort }, __privateGet$5(this, _data));
1046
1273
  }
1047
1274
  select(columns) {
1048
- return new _Query(__privateGet$4(this, _repository), __privateGet$4(this, _table$1), { columns }, __privateGet$4(this, _data));
1275
+ return new _Query(
1276
+ __privateGet$5(this, _repository),
1277
+ __privateGet$5(this, _table$1),
1278
+ { columns },
1279
+ __privateGet$5(this, _data)
1280
+ );
1049
1281
  }
1050
1282
  getPaginated(options = {}) {
1051
- const query = new _Query(__privateGet$4(this, _repository), __privateGet$4(this, _table$1), options, __privateGet$4(this, _data));
1052
- return __privateGet$4(this, _repository).query(query);
1283
+ const query = new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), options, __privateGet$5(this, _data));
1284
+ return __privateGet$5(this, _repository).query(query);
1053
1285
  }
1054
1286
  async *[Symbol.asyncIterator]() {
1055
- for await (const [record] of this.getIterator(1)) {
1287
+ for await (const [record] of this.getIterator({ batchSize: 1 })) {
1056
1288
  yield record;
1057
1289
  }
1058
1290
  }
1059
- async *getIterator(chunk, options = {}) {
1060
- let offset = 0;
1061
- let end = false;
1062
- while (!end) {
1063
- const { records, meta } = await this.getPaginated({ ...options, page: { size: chunk, offset } });
1064
- yield records;
1065
- offset += chunk;
1066
- end = !meta.page.more;
1291
+ async *getIterator(options = {}) {
1292
+ const { batchSize = 1 } = options;
1293
+ let page = await this.getPaginated({ ...options, pagination: { size: batchSize, offset: 0 } });
1294
+ let more = page.hasNextPage();
1295
+ yield page.records;
1296
+ while (more) {
1297
+ page = await page.nextPage();
1298
+ more = page.hasNextPage();
1299
+ yield page.records;
1067
1300
  }
1068
1301
  }
1069
1302
  async getMany(options = {}) {
1070
- const { records } = await this.getPaginated(options);
1071
- return records;
1303
+ const page = await this.getPaginated(options);
1304
+ if (page.hasNextPage() && options.pagination?.size === void 0) {
1305
+ console.trace("Calling getMany does not return all results. Paginate to get all results or call getAll.");
1306
+ }
1307
+ return page.records;
1072
1308
  }
1073
- async getAll(chunk = PAGINATION_MAX_SIZE, options = {}) {
1309
+ async getAll(options = {}) {
1310
+ const { batchSize = PAGINATION_MAX_SIZE, ...rest } = options;
1074
1311
  const results = [];
1075
- for await (const page of this.getIterator(chunk, options)) {
1312
+ for await (const page of this.getIterator({ ...rest, batchSize })) {
1076
1313
  results.push(...page);
1077
1314
  }
1078
1315
  return results;
1079
1316
  }
1080
1317
  async getFirst(options = {}) {
1081
- const records = await this.getMany({ ...options, page: { size: 1 } });
1082
- return records[0] || null;
1318
+ const records = await this.getMany({ ...options, pagination: { size: 1 } });
1319
+ return records[0] ?? null;
1083
1320
  }
1084
1321
  cache(ttl) {
1085
- return new _Query(__privateGet$4(this, _repository), __privateGet$4(this, _table$1), { cache: ttl }, __privateGet$4(this, _data));
1322
+ return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { cache: ttl }, __privateGet$5(this, _data));
1086
1323
  }
1087
1324
  nextPage(size, offset) {
1088
1325
  return this.firstPage(size, offset);
@@ -1091,10 +1328,10 @@ const _Query = class {
1091
1328
  return this.firstPage(size, offset);
1092
1329
  }
1093
1330
  firstPage(size, offset) {
1094
- return this.getPaginated({ page: { size, offset } });
1331
+ return this.getPaginated({ pagination: { size, offset } });
1095
1332
  }
1096
1333
  lastPage(size, offset) {
1097
- return this.getPaginated({ page: { size, offset, before: "end" } });
1334
+ return this.getPaginated({ pagination: { size, offset, before: "end" } });
1098
1335
  }
1099
1336
  hasNextPage() {
1100
1337
  return this.meta.page.more;
@@ -1104,12 +1341,20 @@ let Query = _Query;
1104
1341
  _table$1 = new WeakMap();
1105
1342
  _repository = new WeakMap();
1106
1343
  _data = new WeakMap();
1344
+ function cleanParent(data, parent) {
1345
+ if (isCursorPaginationOptions(data.pagination)) {
1346
+ return { ...parent, sorting: void 0, filter: void 0 };
1347
+ }
1348
+ return parent;
1349
+ }
1107
1350
 
1108
1351
  function isIdentifiable(x) {
1109
1352
  return isObject(x) && isString(x?.id);
1110
1353
  }
1111
1354
  function isXataRecord(x) {
1112
- return isIdentifiable(x) && typeof x?.xata === "object" && typeof x?.xata?.version === "number";
1355
+ const record = x;
1356
+ const metadata = record?.getMetadata();
1357
+ return isIdentifiable(x) && isObject(metadata) && typeof metadata.version === "number";
1113
1358
  }
1114
1359
 
1115
1360
  function isSortFilterString(value) {
@@ -1139,7 +1384,7 @@ var __accessCheck$4 = (obj, member, msg) => {
1139
1384
  if (!member.has(obj))
1140
1385
  throw TypeError("Cannot " + msg);
1141
1386
  };
1142
- var __privateGet$3 = (obj, member, getter) => {
1387
+ var __privateGet$4 = (obj, member, getter) => {
1143
1388
  __accessCheck$4(obj, member, "read from private field");
1144
1389
  return getter ? getter.call(obj) : member.get(obj);
1145
1390
  };
@@ -1148,7 +1393,7 @@ var __privateAdd$4 = (obj, member, value) => {
1148
1393
  throw TypeError("Cannot add the same private member more than once");
1149
1394
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
1150
1395
  };
1151
- var __privateSet$2 = (obj, member, value, setter) => {
1396
+ var __privateSet$4 = (obj, member, value, setter) => {
1152
1397
  __accessCheck$4(obj, member, "write to private field");
1153
1398
  setter ? setter.call(obj, value) : member.set(obj, value);
1154
1399
  return value;
@@ -1157,7 +1402,7 @@ var __privateMethod$2 = (obj, member, method) => {
1157
1402
  __accessCheck$4(obj, member, "access private method");
1158
1403
  return method;
1159
1404
  };
1160
- 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;
1405
+ 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;
1161
1406
  class Repository extends Query {
1162
1407
  }
1163
1408
  class RestRepository extends Query {
@@ -1169,292 +1414,324 @@ class RestRepository extends Query {
1169
1414
  __privateAdd$4(this, _updateRecordWithID);
1170
1415
  __privateAdd$4(this, _upsertRecordWithID);
1171
1416
  __privateAdd$4(this, _deleteRecord);
1172
- __privateAdd$4(this, _invalidateCache);
1173
- __privateAdd$4(this, _setCacheRecord);
1174
- __privateAdd$4(this, _getCacheRecord);
1175
1417
  __privateAdd$4(this, _setCacheQuery);
1176
1418
  __privateAdd$4(this, _getCacheQuery);
1419
+ __privateAdd$4(this, _getSchemaTables$1);
1177
1420
  __privateAdd$4(this, _table, void 0);
1178
- __privateAdd$4(this, _links, void 0);
1179
1421
  __privateAdd$4(this, _getFetchProps, void 0);
1422
+ __privateAdd$4(this, _db, void 0);
1180
1423
  __privateAdd$4(this, _cache, void 0);
1181
- __privateSet$2(this, _table, options.table);
1182
- __privateSet$2(this, _links, options.links ?? {});
1183
- __privateSet$2(this, _getFetchProps, options.pluginOptions.getFetchProps);
1184
- this.db = options.db;
1185
- __privateSet$2(this, _cache, options.pluginOptions.cache);
1186
- }
1187
- async create(a, b) {
1188
- if (Array.isArray(a)) {
1189
- const records = await __privateMethod$2(this, _bulkInsertTableRecords, bulkInsertTableRecords_fn).call(this, a);
1190
- await Promise.all(records.map((record) => __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record)));
1191
- return records;
1192
- }
1193
- if (isString(a) && isObject(b)) {
1194
- if (a === "")
1195
- throw new Error("The id can't be empty");
1196
- const record = await __privateMethod$2(this, _insertRecordWithId, insertRecordWithId_fn).call(this, a, b);
1197
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1198
- return record;
1199
- }
1200
- if (isObject(a) && isString(a.id)) {
1201
- if (a.id === "")
1202
- throw new Error("The id can't be empty");
1203
- const record = await __privateMethod$2(this, _insertRecordWithId, insertRecordWithId_fn).call(this, a.id, { ...a, id: void 0 });
1204
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1205
- return record;
1206
- }
1207
- if (isObject(a)) {
1208
- const record = await __privateMethod$2(this, _insertRecordWithoutId, insertRecordWithoutId_fn).call(this, a);
1209
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1210
- return record;
1211
- }
1212
- throw new Error("Invalid arguments for create method");
1213
- }
1214
- async read(recordId) {
1215
- const cacheRecord = await __privateMethod$2(this, _getCacheRecord, getCacheRecord_fn).call(this, recordId);
1216
- if (cacheRecord)
1217
- return cacheRecord;
1218
- const fetchProps = await __privateGet$3(this, _getFetchProps).call(this);
1219
- try {
1220
- const response = await getRecord({
1221
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$3(this, _table), recordId },
1222
- ...fetchProps
1424
+ __privateAdd$4(this, _schemaTables$2, void 0);
1425
+ __privateAdd$4(this, _trace, void 0);
1426
+ __privateSet$4(this, _table, options.table);
1427
+ __privateSet$4(this, _getFetchProps, options.pluginOptions.getFetchProps);
1428
+ __privateSet$4(this, _db, options.db);
1429
+ __privateSet$4(this, _cache, options.pluginOptions.cache);
1430
+ __privateSet$4(this, _schemaTables$2, options.schemaTables);
1431
+ const trace = options.pluginOptions.trace ?? defaultTrace;
1432
+ __privateSet$4(this, _trace, async (name, fn, options2 = {}) => {
1433
+ return trace(name, fn, {
1434
+ ...options2,
1435
+ [TraceAttributes.TABLE]: __privateGet$4(this, _table),
1436
+ [TraceAttributes.VERSION]: VERSION
1223
1437
  });
1224
- return initObject(this.db, __privateGet$3(this, _links), __privateGet$3(this, _table), response);
1225
- } catch (e) {
1226
- if (isObject(e) && e.status === 404) {
1227
- return null;
1438
+ });
1439
+ }
1440
+ async create(a, b, c) {
1441
+ return __privateGet$4(this, _trace).call(this, "create", async () => {
1442
+ if (Array.isArray(a)) {
1443
+ if (a.length === 0)
1444
+ return [];
1445
+ const columns = isStringArray(b) ? b : void 0;
1446
+ return __privateMethod$2(this, _bulkInsertTableRecords, bulkInsertTableRecords_fn).call(this, a, columns);
1228
1447
  }
1229
- throw e;
1230
- }
1448
+ if (isString(a) && isObject(b)) {
1449
+ if (a === "")
1450
+ throw new Error("The id can't be empty");
1451
+ const columns = isStringArray(c) ? c : void 0;
1452
+ return __privateMethod$2(this, _insertRecordWithId, insertRecordWithId_fn).call(this, a, b, columns);
1453
+ }
1454
+ if (isObject(a) && isString(a.id)) {
1455
+ if (a.id === "")
1456
+ throw new Error("The id can't be empty");
1457
+ const columns = isStringArray(b) ? b : void 0;
1458
+ return __privateMethod$2(this, _insertRecordWithId, insertRecordWithId_fn).call(this, a.id, { ...a, id: void 0 }, columns);
1459
+ }
1460
+ if (isObject(a)) {
1461
+ const columns = isStringArray(b) ? b : void 0;
1462
+ return __privateMethod$2(this, _insertRecordWithoutId, insertRecordWithoutId_fn).call(this, a, columns);
1463
+ }
1464
+ throw new Error("Invalid arguments for create method");
1465
+ });
1231
1466
  }
1232
- async update(a, b) {
1233
- if (Array.isArray(a)) {
1234
- if (a.length > 100) {
1235
- console.warn("Bulk update operation is not optimized in the Xata API yet, this request might be slow");
1467
+ async read(a, b) {
1468
+ return __privateGet$4(this, _trace).call(this, "read", async () => {
1469
+ const columns = isStringArray(b) ? b : ["*"];
1470
+ if (Array.isArray(a)) {
1471
+ if (a.length === 0)
1472
+ return [];
1473
+ const ids = a.map((item) => isString(item) ? item : item.id).filter((id2) => isString(id2));
1474
+ const finalObjects = await this.getAll({ filter: { id: { $any: ids } }, columns });
1475
+ const dictionary = finalObjects.reduce((acc, object) => {
1476
+ acc[object.id] = object;
1477
+ return acc;
1478
+ }, {});
1479
+ return ids.map((id2) => dictionary[id2] ?? null);
1236
1480
  }
1237
- return Promise.all(a.map((object) => this.update(object)));
1238
- }
1239
- if (isString(a) && isObject(b)) {
1240
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a);
1241
- const record = await __privateMethod$2(this, _updateRecordWithID, updateRecordWithID_fn).call(this, a, b);
1242
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1243
- return record;
1244
- }
1245
- if (isObject(a) && isString(a.id)) {
1246
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a.id);
1247
- const record = await __privateMethod$2(this, _updateRecordWithID, updateRecordWithID_fn).call(this, a.id, { ...a, id: void 0 });
1248
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1249
- return record;
1250
- }
1251
- throw new Error("Invalid arguments for update method");
1481
+ const id = isString(a) ? a : a.id;
1482
+ if (isString(id)) {
1483
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1484
+ try {
1485
+ const response = await getRecord({
1486
+ pathParams: {
1487
+ workspace: "{workspaceId}",
1488
+ dbBranchName: "{dbBranch}",
1489
+ tableName: __privateGet$4(this, _table),
1490
+ recordId: id
1491
+ },
1492
+ queryParams: { columns },
1493
+ ...fetchProps
1494
+ });
1495
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
1496
+ return initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), response);
1497
+ } catch (e) {
1498
+ if (isObject(e) && e.status === 404) {
1499
+ return null;
1500
+ }
1501
+ throw e;
1502
+ }
1503
+ }
1504
+ return null;
1505
+ });
1252
1506
  }
1253
- async createOrUpdate(a, b) {
1254
- if (Array.isArray(a)) {
1255
- if (a.length > 100) {
1256
- console.warn("Bulk update operation is not optimized in the Xata API yet, this request might be slow");
1507
+ async update(a, b, c) {
1508
+ return __privateGet$4(this, _trace).call(this, "update", async () => {
1509
+ if (Array.isArray(a)) {
1510
+ if (a.length === 0)
1511
+ return [];
1512
+ if (a.length > 100) {
1513
+ console.warn("Bulk update operation is not optimized in the Xata API yet, this request might be slow");
1514
+ }
1515
+ const columns = isStringArray(b) ? b : ["*"];
1516
+ return Promise.all(a.map((object) => this.update(object, columns)));
1257
1517
  }
1258
- return Promise.all(a.map((object) => this.createOrUpdate(object)));
1259
- }
1260
- if (isString(a) && isObject(b)) {
1261
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a);
1262
- const record = await __privateMethod$2(this, _upsertRecordWithID, upsertRecordWithID_fn).call(this, a, b);
1263
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1264
- return record;
1265
- }
1266
- if (isObject(a) && isString(a.id)) {
1267
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a.id);
1268
- const record = await __privateMethod$2(this, _upsertRecordWithID, upsertRecordWithID_fn).call(this, a.id, { ...a, id: void 0 });
1269
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1270
- return record;
1271
- }
1272
- throw new Error("Invalid arguments for createOrUpdate method");
1518
+ if (isString(a) && isObject(b)) {
1519
+ const columns = isStringArray(c) ? c : void 0;
1520
+ return __privateMethod$2(this, _updateRecordWithID, updateRecordWithID_fn).call(this, a, b, columns);
1521
+ }
1522
+ if (isObject(a) && isString(a.id)) {
1523
+ const columns = isStringArray(b) ? b : void 0;
1524
+ return __privateMethod$2(this, _updateRecordWithID, updateRecordWithID_fn).call(this, a.id, { ...a, id: void 0 }, columns);
1525
+ }
1526
+ throw new Error("Invalid arguments for update method");
1527
+ });
1528
+ }
1529
+ async createOrUpdate(a, b, c) {
1530
+ return __privateGet$4(this, _trace).call(this, "createOrUpdate", async () => {
1531
+ if (Array.isArray(a)) {
1532
+ if (a.length === 0)
1533
+ return [];
1534
+ if (a.length > 100) {
1535
+ console.warn("Bulk update operation is not optimized in the Xata API yet, this request might be slow");
1536
+ }
1537
+ const columns = isStringArray(b) ? b : ["*"];
1538
+ return Promise.all(a.map((object) => this.createOrUpdate(object, columns)));
1539
+ }
1540
+ if (isString(a) && isObject(b)) {
1541
+ const columns = isStringArray(c) ? c : void 0;
1542
+ return __privateMethod$2(this, _upsertRecordWithID, upsertRecordWithID_fn).call(this, a, b, columns);
1543
+ }
1544
+ if (isObject(a) && isString(a.id)) {
1545
+ const columns = isStringArray(c) ? c : void 0;
1546
+ return __privateMethod$2(this, _upsertRecordWithID, upsertRecordWithID_fn).call(this, a.id, { ...a, id: void 0 }, columns);
1547
+ }
1548
+ throw new Error("Invalid arguments for createOrUpdate method");
1549
+ });
1273
1550
  }
1274
1551
  async delete(a) {
1275
- if (Array.isArray(a)) {
1276
- if (a.length > 100) {
1277
- console.warn("Bulk delete operation is not optimized in the Xata API yet, this request might be slow");
1552
+ return __privateGet$4(this, _trace).call(this, "delete", async () => {
1553
+ if (Array.isArray(a)) {
1554
+ if (a.length === 0)
1555
+ return;
1556
+ if (a.length > 100) {
1557
+ console.warn("Bulk delete operation is not optimized in the Xata API yet, this request might be slow");
1558
+ }
1559
+ await Promise.all(a.map((id) => this.delete(id)));
1560
+ return;
1278
1561
  }
1279
- await Promise.all(a.map((id) => this.delete(id)));
1280
- return;
1281
- }
1282
- if (isString(a)) {
1283
- await __privateMethod$2(this, _deleteRecord, deleteRecord_fn).call(this, a);
1284
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a);
1285
- return;
1286
- }
1287
- if (isObject(a) && isString(a.id)) {
1288
- await __privateMethod$2(this, _deleteRecord, deleteRecord_fn).call(this, a.id);
1289
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a.id);
1290
- return;
1291
- }
1292
- throw new Error("Invalid arguments for delete method");
1562
+ if (isString(a)) {
1563
+ await __privateMethod$2(this, _deleteRecord, deleteRecord_fn).call(this, a);
1564
+ return;
1565
+ }
1566
+ if (isObject(a) && isString(a.id)) {
1567
+ await __privateMethod$2(this, _deleteRecord, deleteRecord_fn).call(this, a.id);
1568
+ return;
1569
+ }
1570
+ throw new Error("Invalid arguments for delete method");
1571
+ });
1293
1572
  }
1294
1573
  async search(query, options = {}) {
1295
- const fetchProps = await __privateGet$3(this, _getFetchProps).call(this);
1296
- const { records } = await searchBranch({
1297
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}" },
1298
- body: { tables: [__privateGet$3(this, _table)], query, fuzziness: options.fuzziness },
1299
- ...fetchProps
1574
+ return __privateGet$4(this, _trace).call(this, "search", async () => {
1575
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1576
+ const { records } = await searchTable({
1577
+ pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table) },
1578
+ body: {
1579
+ query,
1580
+ fuzziness: options.fuzziness,
1581
+ prefix: options.prefix,
1582
+ highlight: options.highlight,
1583
+ filter: options.filter,
1584
+ boosters: options.boosters
1585
+ },
1586
+ ...fetchProps
1587
+ });
1588
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
1589
+ return records.map((item) => initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), item));
1300
1590
  });
1301
- return records.map((item) => initObject(this.db, __privateGet$3(this, _links), __privateGet$3(this, _table), item));
1302
1591
  }
1303
1592
  async query(query) {
1304
- const cacheQuery = await __privateMethod$2(this, _getCacheQuery, getCacheQuery_fn).call(this, query);
1305
- if (cacheQuery)
1306
- return new Page(query, cacheQuery.meta, cacheQuery.records);
1307
- const data = query.getQueryOptions();
1308
- const body = {
1309
- filter: Object.values(data.filter ?? {}).some(Boolean) ? data.filter : void 0,
1310
- sort: data.sort ? buildSortFilter(data.sort) : void 0,
1311
- page: data.page,
1312
- columns: data.columns
1313
- };
1314
- const fetchProps = await __privateGet$3(this, _getFetchProps).call(this);
1315
- const { meta, records: objects } = await queryTable({
1316
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$3(this, _table) },
1317
- body,
1318
- ...fetchProps
1593
+ return __privateGet$4(this, _trace).call(this, "query", async () => {
1594
+ const cacheQuery = await __privateMethod$2(this, _getCacheQuery, getCacheQuery_fn).call(this, query);
1595
+ if (cacheQuery)
1596
+ return new Page(query, cacheQuery.meta, cacheQuery.records);
1597
+ const data = query.getQueryOptions();
1598
+ const body = {
1599
+ filter: Object.values(data.filter ?? {}).some(Boolean) ? data.filter : void 0,
1600
+ sort: data.sort !== void 0 ? buildSortFilter(data.sort) : void 0,
1601
+ page: data.pagination,
1602
+ columns: data.columns
1603
+ };
1604
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1605
+ const { meta, records: objects } = await queryTable({
1606
+ pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table) },
1607
+ body,
1608
+ ...fetchProps
1609
+ });
1610
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
1611
+ const records = objects.map((record) => initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), record));
1612
+ await __privateMethod$2(this, _setCacheQuery, setCacheQuery_fn).call(this, query, meta, records);
1613
+ return new Page(query, meta, records);
1319
1614
  });
1320
- const records = objects.map((record) => initObject(this.db, __privateGet$3(this, _links), __privateGet$3(this, _table), record));
1321
- await __privateMethod$2(this, _setCacheQuery, setCacheQuery_fn).call(this, query, meta, records);
1322
- return new Page(query, meta, records);
1323
1615
  }
1324
1616
  }
1325
1617
  _table = new WeakMap();
1326
- _links = new WeakMap();
1327
1618
  _getFetchProps = new WeakMap();
1619
+ _db = new WeakMap();
1328
1620
  _cache = new WeakMap();
1621
+ _schemaTables$2 = new WeakMap();
1622
+ _trace = new WeakMap();
1329
1623
  _insertRecordWithoutId = new WeakSet();
1330
- insertRecordWithoutId_fn = async function(object) {
1331
- const fetchProps = await __privateGet$3(this, _getFetchProps).call(this);
1624
+ insertRecordWithoutId_fn = async function(object, columns = ["*"]) {
1625
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1332
1626
  const record = transformObjectLinks(object);
1333
1627
  const response = await insertRecord({
1334
1628
  pathParams: {
1335
1629
  workspace: "{workspaceId}",
1336
1630
  dbBranchName: "{dbBranch}",
1337
- tableName: __privateGet$3(this, _table)
1631
+ tableName: __privateGet$4(this, _table)
1338
1632
  },
1633
+ queryParams: { columns },
1339
1634
  body: record,
1340
1635
  ...fetchProps
1341
1636
  });
1342
- const finalObject = await this.read(response.id);
1343
- if (!finalObject) {
1344
- throw new Error("The server failed to save the record");
1345
- }
1346
- return finalObject;
1637
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
1638
+ return initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), response);
1347
1639
  };
1348
1640
  _insertRecordWithId = new WeakSet();
1349
- insertRecordWithId_fn = async function(recordId, object) {
1350
- const fetchProps = await __privateGet$3(this, _getFetchProps).call(this);
1641
+ insertRecordWithId_fn = async function(recordId, object, columns = ["*"]) {
1642
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1351
1643
  const record = transformObjectLinks(object);
1352
1644
  const response = await insertRecordWithID({
1353
1645
  pathParams: {
1354
1646
  workspace: "{workspaceId}",
1355
1647
  dbBranchName: "{dbBranch}",
1356
- tableName: __privateGet$3(this, _table),
1648
+ tableName: __privateGet$4(this, _table),
1357
1649
  recordId
1358
1650
  },
1359
1651
  body: record,
1360
- queryParams: { createOnly: true },
1652
+ queryParams: { createOnly: true, columns },
1361
1653
  ...fetchProps
1362
1654
  });
1363
- const finalObject = await this.read(response.id);
1364
- if (!finalObject) {
1365
- throw new Error("The server failed to save the record");
1366
- }
1367
- return finalObject;
1655
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
1656
+ return initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), response);
1368
1657
  };
1369
1658
  _bulkInsertTableRecords = new WeakSet();
1370
- bulkInsertTableRecords_fn = async function(objects) {
1371
- const fetchProps = await __privateGet$3(this, _getFetchProps).call(this);
1659
+ bulkInsertTableRecords_fn = async function(objects, columns = ["*"]) {
1660
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1372
1661
  const records = objects.map((object) => transformObjectLinks(object));
1373
1662
  const response = await bulkInsertTableRecords({
1374
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$3(this, _table) },
1663
+ pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table) },
1664
+ queryParams: { columns },
1375
1665
  body: { records },
1376
1666
  ...fetchProps
1377
1667
  });
1378
- const finalObjects = await this.any(...response.recordIDs.map((id) => this.filter("id", id))).getAll();
1379
- if (finalObjects.length !== objects.length) {
1380
- throw new Error("The server failed to save some records");
1668
+ if (!isResponseWithRecords(response)) {
1669
+ throw new Error("Request included columns but server didn't include them");
1381
1670
  }
1382
- return finalObjects;
1671
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
1672
+ return response.records?.map((item) => initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), item));
1383
1673
  };
1384
1674
  _updateRecordWithID = new WeakSet();
1385
- updateRecordWithID_fn = async function(recordId, object) {
1386
- const fetchProps = await __privateGet$3(this, _getFetchProps).call(this);
1675
+ updateRecordWithID_fn = async function(recordId, object, columns = ["*"]) {
1676
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1387
1677
  const record = transformObjectLinks(object);
1388
1678
  const response = await updateRecordWithID({
1389
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$3(this, _table), recordId },
1679
+ pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table), recordId },
1680
+ queryParams: { columns },
1390
1681
  body: record,
1391
1682
  ...fetchProps
1392
1683
  });
1393
- const item = await this.read(response.id);
1394
- if (!item)
1395
- throw new Error("The server failed to save the record");
1396
- return item;
1684
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
1685
+ return initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), response);
1397
1686
  };
1398
1687
  _upsertRecordWithID = new WeakSet();
1399
- upsertRecordWithID_fn = async function(recordId, object) {
1400
- const fetchProps = await __privateGet$3(this, _getFetchProps).call(this);
1688
+ upsertRecordWithID_fn = async function(recordId, object, columns = ["*"]) {
1689
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1401
1690
  const response = await upsertRecordWithID({
1402
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$3(this, _table), recordId },
1691
+ pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table), recordId },
1692
+ queryParams: { columns },
1403
1693
  body: object,
1404
1694
  ...fetchProps
1405
1695
  });
1406
- const item = await this.read(response.id);
1407
- if (!item)
1408
- throw new Error("The server failed to save the record");
1409
- return item;
1696
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
1697
+ return initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), response);
1410
1698
  };
1411
1699
  _deleteRecord = new WeakSet();
1412
1700
  deleteRecord_fn = async function(recordId) {
1413
- const fetchProps = await __privateGet$3(this, _getFetchProps).call(this);
1701
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1414
1702
  await deleteRecord({
1415
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$3(this, _table), recordId },
1703
+ pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table), recordId },
1416
1704
  ...fetchProps
1417
1705
  });
1418
1706
  };
1419
- _invalidateCache = new WeakSet();
1420
- invalidateCache_fn = async function(recordId) {
1421
- await __privateGet$3(this, _cache).delete(`rec_${__privateGet$3(this, _table)}:${recordId}`);
1422
- const cacheItems = await __privateGet$3(this, _cache).getAll();
1423
- const queries = Object.entries(cacheItems).filter(([key]) => key.startsWith("query_"));
1424
- for (const [key, value] of queries) {
1425
- const ids = getIds(value);
1426
- if (ids.includes(recordId))
1427
- await __privateGet$3(this, _cache).delete(key);
1428
- }
1429
- };
1430
- _setCacheRecord = new WeakSet();
1431
- setCacheRecord_fn = async function(record) {
1432
- if (!__privateGet$3(this, _cache).cacheRecords)
1433
- return;
1434
- await __privateGet$3(this, _cache).set(`rec_${__privateGet$3(this, _table)}:${record.id}`, record);
1435
- };
1436
- _getCacheRecord = new WeakSet();
1437
- getCacheRecord_fn = async function(recordId) {
1438
- if (!__privateGet$3(this, _cache).cacheRecords)
1439
- return null;
1440
- return __privateGet$3(this, _cache).get(`rec_${__privateGet$3(this, _table)}:${recordId}`);
1441
- };
1442
1707
  _setCacheQuery = new WeakSet();
1443
1708
  setCacheQuery_fn = async function(query, meta, records) {
1444
- await __privateGet$3(this, _cache).set(`query_${__privateGet$3(this, _table)}:${query.key()}`, { date: new Date(), meta, records });
1709
+ await __privateGet$4(this, _cache).set(`query_${__privateGet$4(this, _table)}:${query.key()}`, { date: new Date(), meta, records });
1445
1710
  };
1446
1711
  _getCacheQuery = new WeakSet();
1447
1712
  getCacheQuery_fn = async function(query) {
1448
- const key = `query_${__privateGet$3(this, _table)}:${query.key()}`;
1449
- const result = await __privateGet$3(this, _cache).get(key);
1713
+ const key = `query_${__privateGet$4(this, _table)}:${query.key()}`;
1714
+ const result = await __privateGet$4(this, _cache).get(key);
1450
1715
  if (!result)
1451
1716
  return null;
1452
- const { cache: ttl = __privateGet$3(this, _cache).defaultQueryTTL } = query.getQueryOptions();
1453
- if (!ttl || ttl < 0)
1454
- return result;
1717
+ const { cache: ttl = __privateGet$4(this, _cache).defaultQueryTTL } = query.getQueryOptions();
1718
+ if (ttl < 0)
1719
+ return null;
1455
1720
  const hasExpired = result.date.getTime() + ttl < Date.now();
1456
1721
  return hasExpired ? null : result;
1457
1722
  };
1723
+ _getSchemaTables$1 = new WeakSet();
1724
+ getSchemaTables_fn$1 = async function() {
1725
+ if (__privateGet$4(this, _schemaTables$2))
1726
+ return __privateGet$4(this, _schemaTables$2);
1727
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1728
+ const { schema } = await getBranchDetails({
1729
+ pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}" },
1730
+ ...fetchProps
1731
+ });
1732
+ __privateSet$4(this, _schemaTables$2, schema.tables);
1733
+ return schema.tables;
1734
+ };
1458
1735
  const transformObjectLinks = (object) => {
1459
1736
  return Object.entries(object).reduce((acc, [key, value]) => {
1460
1737
  if (key === "xata")
@@ -1462,47 +1739,63 @@ const transformObjectLinks = (object) => {
1462
1739
  return { ...acc, [key]: isIdentifiable(value) ? value.id : value };
1463
1740
  }, {});
1464
1741
  };
1465
- const initObject = (db, links, table, object) => {
1742
+ const initObject = (db, schemaTables, table, object) => {
1466
1743
  const result = {};
1467
- Object.assign(result, object);
1468
- const tableLinks = links[table] || [];
1469
- for (const link of tableLinks) {
1470
- const [field, linkTable] = link;
1471
- const value = result[field];
1472
- if (value && isObject(value)) {
1473
- result[field] = initObject(db, links, linkTable, value);
1744
+ const { xata, ...rest } = object ?? {};
1745
+ Object.assign(result, rest);
1746
+ const { columns } = schemaTables.find(({ name }) => name === table) ?? {};
1747
+ if (!columns)
1748
+ console.error(`Table ${table} not found in schema`);
1749
+ for (const column of columns ?? []) {
1750
+ const value = result[column.name];
1751
+ switch (column.type) {
1752
+ case "datetime": {
1753
+ const date = value !== void 0 ? new Date(value) : void 0;
1754
+ if (date && isNaN(date.getTime())) {
1755
+ console.error(`Failed to parse date ${value} for field ${column.name}`);
1756
+ } else if (date) {
1757
+ result[column.name] = date;
1758
+ }
1759
+ break;
1760
+ }
1761
+ case "link": {
1762
+ const linkTable = column.link?.table;
1763
+ if (!linkTable) {
1764
+ console.error(`Failed to parse link for field ${column.name}`);
1765
+ } else if (isObject(value)) {
1766
+ result[column.name] = initObject(db, schemaTables, linkTable, value);
1767
+ }
1768
+ break;
1769
+ }
1474
1770
  }
1475
1771
  }
1476
- result.read = function() {
1477
- return db[table].read(result["id"]);
1772
+ result.read = function(columns2) {
1773
+ return db[table].read(result["id"], columns2);
1478
1774
  };
1479
- result.update = function(data) {
1480
- return db[table].update(result["id"], data);
1775
+ result.update = function(data, columns2) {
1776
+ return db[table].update(result["id"], data, columns2);
1481
1777
  };
1482
1778
  result.delete = function() {
1483
1779
  return db[table].delete(result["id"]);
1484
1780
  };
1485
- for (const prop of ["read", "update", "delete"]) {
1781
+ result.getMetadata = function() {
1782
+ return xata;
1783
+ };
1784
+ for (const prop of ["read", "update", "delete", "getMetadata"]) {
1486
1785
  Object.defineProperty(result, prop, { enumerable: false });
1487
1786
  }
1488
1787
  Object.freeze(result);
1489
1788
  return result;
1490
1789
  };
1491
- function getIds(value) {
1492
- if (Array.isArray(value)) {
1493
- return value.map((item) => getIds(item)).flat();
1494
- }
1495
- if (!isObject(value))
1496
- return [];
1497
- const nestedIds = Object.values(value).map((item) => getIds(item)).flat();
1498
- return isString(value.id) ? [value.id, ...nestedIds] : nestedIds;
1790
+ function isResponseWithRecords(value) {
1791
+ return isObject(value) && Array.isArray(value.records);
1499
1792
  }
1500
1793
 
1501
1794
  var __accessCheck$3 = (obj, member, msg) => {
1502
1795
  if (!member.has(obj))
1503
1796
  throw TypeError("Cannot " + msg);
1504
1797
  };
1505
- var __privateGet$2 = (obj, member, getter) => {
1798
+ var __privateGet$3 = (obj, member, getter) => {
1506
1799
  __accessCheck$3(obj, member, "read from private field");
1507
1800
  return getter ? getter.call(obj) : member.get(obj);
1508
1801
  };
@@ -1511,7 +1804,7 @@ var __privateAdd$3 = (obj, member, value) => {
1511
1804
  throw TypeError("Cannot add the same private member more than once");
1512
1805
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
1513
1806
  };
1514
- var __privateSet$1 = (obj, member, value, setter) => {
1807
+ var __privateSet$3 = (obj, member, value, setter) => {
1515
1808
  __accessCheck$3(obj, member, "write to private field");
1516
1809
  setter ? setter.call(obj, value) : member.set(obj, value);
1517
1810
  return value;
@@ -1520,46 +1813,52 @@ var _map;
1520
1813
  class SimpleCache {
1521
1814
  constructor(options = {}) {
1522
1815
  __privateAdd$3(this, _map, void 0);
1523
- __privateSet$1(this, _map, /* @__PURE__ */ new Map());
1816
+ __privateSet$3(this, _map, /* @__PURE__ */ new Map());
1524
1817
  this.capacity = options.max ?? 500;
1525
- this.cacheRecords = options.cacheRecords ?? true;
1526
1818
  this.defaultQueryTTL = options.defaultQueryTTL ?? 60 * 1e3;
1527
1819
  }
1528
1820
  async getAll() {
1529
- return Object.fromEntries(__privateGet$2(this, _map));
1821
+ return Object.fromEntries(__privateGet$3(this, _map));
1530
1822
  }
1531
1823
  async get(key) {
1532
- return __privateGet$2(this, _map).get(key) ?? null;
1824
+ return __privateGet$3(this, _map).get(key) ?? null;
1533
1825
  }
1534
1826
  async set(key, value) {
1535
1827
  await this.delete(key);
1536
- __privateGet$2(this, _map).set(key, value);
1537
- if (__privateGet$2(this, _map).size > this.capacity) {
1538
- const leastRecentlyUsed = __privateGet$2(this, _map).keys().next().value;
1828
+ __privateGet$3(this, _map).set(key, value);
1829
+ if (__privateGet$3(this, _map).size > this.capacity) {
1830
+ const leastRecentlyUsed = __privateGet$3(this, _map).keys().next().value;
1539
1831
  await this.delete(leastRecentlyUsed);
1540
1832
  }
1541
1833
  }
1542
1834
  async delete(key) {
1543
- __privateGet$2(this, _map).delete(key);
1835
+ __privateGet$3(this, _map).delete(key);
1544
1836
  }
1545
1837
  async clear() {
1546
- return __privateGet$2(this, _map).clear();
1838
+ return __privateGet$3(this, _map).clear();
1547
1839
  }
1548
1840
  }
1549
1841
  _map = new WeakMap();
1550
1842
 
1551
- const gt = (value) => ({ $gt: value });
1552
- const ge = (value) => ({ $ge: value });
1553
- const gte = (value) => ({ $ge: value });
1554
- const lt = (value) => ({ $lt: value });
1555
- const lte = (value) => ({ $le: value });
1556
- const le = (value) => ({ $le: value });
1843
+ const greaterThan = (value) => ({ $gt: value });
1844
+ const gt = greaterThan;
1845
+ const greaterThanEquals = (value) => ({ $ge: value });
1846
+ const greaterEquals = greaterThanEquals;
1847
+ const gte = greaterThanEquals;
1848
+ const ge = greaterThanEquals;
1849
+ const lessThan = (value) => ({ $lt: value });
1850
+ const lt = lessThan;
1851
+ const lessThanEquals = (value) => ({ $le: value });
1852
+ const lessEquals = lessThanEquals;
1853
+ const lte = lessThanEquals;
1854
+ const le = lessThanEquals;
1557
1855
  const exists = (column) => ({ $exists: column });
1558
1856
  const notExists = (column) => ({ $notExists: column });
1559
1857
  const startsWith = (value) => ({ $startsWith: value });
1560
1858
  const endsWith = (value) => ({ $endsWith: value });
1561
1859
  const pattern = (value) => ({ $pattern: value });
1562
1860
  const is = (value) => ({ $is: value });
1861
+ const equals = is;
1563
1862
  const isNot = (value) => ({ $isNot: value });
1564
1863
  const contains = (value) => ({ $contains: value });
1565
1864
  const includes = (value) => ({ $includes: value });
@@ -1571,7 +1870,7 @@ var __accessCheck$2 = (obj, member, msg) => {
1571
1870
  if (!member.has(obj))
1572
1871
  throw TypeError("Cannot " + msg);
1573
1872
  };
1574
- var __privateGet$1 = (obj, member, getter) => {
1873
+ var __privateGet$2 = (obj, member, getter) => {
1575
1874
  __accessCheck$2(obj, member, "read from private field");
1576
1875
  return getter ? getter.call(obj) : member.get(obj);
1577
1876
  };
@@ -1580,130 +1879,178 @@ var __privateAdd$2 = (obj, member, value) => {
1580
1879
  throw TypeError("Cannot add the same private member more than once");
1581
1880
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
1582
1881
  };
1583
- var _tables;
1882
+ var __privateSet$2 = (obj, member, value, setter) => {
1883
+ __accessCheck$2(obj, member, "write to private field");
1884
+ setter ? setter.call(obj, value) : member.set(obj, value);
1885
+ return value;
1886
+ };
1887
+ var _tables, _schemaTables$1;
1584
1888
  class SchemaPlugin extends XataPlugin {
1585
- constructor(links, tableNames) {
1889
+ constructor(schemaTables) {
1586
1890
  super();
1587
- this.links = links;
1588
- this.tableNames = tableNames;
1589
1891
  __privateAdd$2(this, _tables, {});
1892
+ __privateAdd$2(this, _schemaTables$1, void 0);
1893
+ __privateSet$2(this, _schemaTables$1, schemaTables);
1590
1894
  }
1591
1895
  build(pluginOptions) {
1592
- const links = this.links;
1593
- const db = new Proxy({}, {
1594
- get: (_target, table) => {
1595
- if (!isString(table))
1596
- throw new Error("Invalid table name");
1597
- if (!__privateGet$1(this, _tables)[table]) {
1598
- __privateGet$1(this, _tables)[table] = new RestRepository({ db, pluginOptions, table, links });
1896
+ const db = new Proxy(
1897
+ {},
1898
+ {
1899
+ get: (_target, table) => {
1900
+ if (!isString(table))
1901
+ throw new Error("Invalid table name");
1902
+ if (__privateGet$2(this, _tables)[table] === void 0) {
1903
+ __privateGet$2(this, _tables)[table] = new RestRepository({ db, pluginOptions, table, schemaTables: __privateGet$2(this, _schemaTables$1) });
1904
+ }
1905
+ return __privateGet$2(this, _tables)[table];
1599
1906
  }
1600
- return __privateGet$1(this, _tables)[table];
1601
1907
  }
1602
- });
1603
- for (const table of this.tableNames ?? []) {
1604
- db[table] = new RestRepository({ db, pluginOptions, table, links });
1908
+ );
1909
+ const tableNames = __privateGet$2(this, _schemaTables$1)?.map(({ name }) => name) ?? [];
1910
+ for (const table of tableNames) {
1911
+ db[table] = new RestRepository({ db, pluginOptions, table, schemaTables: __privateGet$2(this, _schemaTables$1) });
1605
1912
  }
1606
1913
  return db;
1607
1914
  }
1608
1915
  }
1609
1916
  _tables = new WeakMap();
1917
+ _schemaTables$1 = new WeakMap();
1610
1918
 
1611
1919
  var __accessCheck$1 = (obj, member, msg) => {
1612
1920
  if (!member.has(obj))
1613
1921
  throw TypeError("Cannot " + msg);
1614
1922
  };
1923
+ var __privateGet$1 = (obj, member, getter) => {
1924
+ __accessCheck$1(obj, member, "read from private field");
1925
+ return getter ? getter.call(obj) : member.get(obj);
1926
+ };
1615
1927
  var __privateAdd$1 = (obj, member, value) => {
1616
1928
  if (member.has(obj))
1617
1929
  throw TypeError("Cannot add the same private member more than once");
1618
1930
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
1619
1931
  };
1932
+ var __privateSet$1 = (obj, member, value, setter) => {
1933
+ __accessCheck$1(obj, member, "write to private field");
1934
+ setter ? setter.call(obj, value) : member.set(obj, value);
1935
+ return value;
1936
+ };
1620
1937
  var __privateMethod$1 = (obj, member, method) => {
1621
1938
  __accessCheck$1(obj, member, "access private method");
1622
1939
  return method;
1623
1940
  };
1624
- var _search, search_fn;
1941
+ var _schemaTables, _search, search_fn, _getSchemaTables, getSchemaTables_fn;
1625
1942
  class SearchPlugin extends XataPlugin {
1626
- constructor(db, links) {
1943
+ constructor(db, schemaTables) {
1627
1944
  super();
1628
1945
  this.db = db;
1629
- this.links = links;
1630
1946
  __privateAdd$1(this, _search);
1947
+ __privateAdd$1(this, _getSchemaTables);
1948
+ __privateAdd$1(this, _schemaTables, void 0);
1949
+ __privateSet$1(this, _schemaTables, schemaTables);
1631
1950
  }
1632
1951
  build({ getFetchProps }) {
1633
1952
  return {
1634
1953
  all: async (query, options = {}) => {
1635
1954
  const records = await __privateMethod$1(this, _search, search_fn).call(this, query, options, getFetchProps);
1955
+ const schemaTables = await __privateMethod$1(this, _getSchemaTables, getSchemaTables_fn).call(this, getFetchProps);
1636
1956
  return records.map((record) => {
1637
1957
  const { table = "orphan" } = record.xata;
1638
- return { table, record: initObject(this.db, this.links, table, record) };
1958
+ return { table, record: initObject(this.db, schemaTables, table, record) };
1639
1959
  });
1640
1960
  },
1641
1961
  byTable: async (query, options = {}) => {
1642
1962
  const records = await __privateMethod$1(this, _search, search_fn).call(this, query, options, getFetchProps);
1963
+ const schemaTables = await __privateMethod$1(this, _getSchemaTables, getSchemaTables_fn).call(this, getFetchProps);
1643
1964
  return records.reduce((acc, record) => {
1644
1965
  const { table = "orphan" } = record.xata;
1645
1966
  const items = acc[table] ?? [];
1646
- const item = initObject(this.db, this.links, table, record);
1967
+ const item = initObject(this.db, schemaTables, table, record);
1647
1968
  return { ...acc, [table]: [...items, item] };
1648
1969
  }, {});
1649
1970
  }
1650
1971
  };
1651
1972
  }
1652
1973
  }
1974
+ _schemaTables = new WeakMap();
1653
1975
  _search = new WeakSet();
1654
1976
  search_fn = async function(query, options, getFetchProps) {
1655
1977
  const fetchProps = await getFetchProps();
1656
- const { tables, fuzziness } = options ?? {};
1978
+ const { tables, fuzziness, highlight, prefix } = options ?? {};
1657
1979
  const { records } = await searchBranch({
1658
1980
  pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}" },
1659
- body: { tables, query, fuzziness },
1981
+ body: { tables, query, fuzziness, prefix, highlight },
1660
1982
  ...fetchProps
1661
1983
  });
1662
1984
  return records;
1663
1985
  };
1986
+ _getSchemaTables = new WeakSet();
1987
+ getSchemaTables_fn = async function(getFetchProps) {
1988
+ if (__privateGet$1(this, _schemaTables))
1989
+ return __privateGet$1(this, _schemaTables);
1990
+ const fetchProps = await getFetchProps();
1991
+ const { schema } = await getBranchDetails({
1992
+ pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}" },
1993
+ ...fetchProps
1994
+ });
1995
+ __privateSet$1(this, _schemaTables, schema.tables);
1996
+ return schema.tables;
1997
+ };
1664
1998
 
1665
1999
  const isBranchStrategyBuilder = (strategy) => {
1666
2000
  return typeof strategy === "function";
1667
2001
  };
1668
2002
 
1669
- const envBranchNames = [
1670
- "XATA_BRANCH",
1671
- "VERCEL_GIT_COMMIT_REF",
1672
- "CF_PAGES_BRANCH",
1673
- "BRANCH"
1674
- ];
1675
- const defaultBranch = "main";
1676
2003
  async function getCurrentBranchName(options) {
1677
- const env = await getBranchByEnvVariable();
1678
- if (env)
1679
- return env;
1680
- const branch = await getGitBranch();
1681
- if (!branch)
1682
- return defaultBranch;
1683
- const details = await getDatabaseBranch(branch, options);
1684
- if (details)
1685
- return branch;
1686
- return defaultBranch;
2004
+ const { branch, envBranch } = getEnvironment();
2005
+ if (branch) {
2006
+ const details = await getDatabaseBranch(branch, options);
2007
+ if (details)
2008
+ return branch;
2009
+ console.warn(`Branch ${branch} not found in Xata. Ignoring...`);
2010
+ }
2011
+ const gitBranch = envBranch || await getGitBranch();
2012
+ return resolveXataBranch(gitBranch, options);
1687
2013
  }
1688
2014
  async function getCurrentBranchDetails(options) {
1689
- const env = await getBranchByEnvVariable();
1690
- if (env)
1691
- return getDatabaseBranch(env, options);
1692
- const branch = await getGitBranch();
1693
- if (!branch)
1694
- return getDatabaseBranch(defaultBranch, options);
1695
- const details = await getDatabaseBranch(branch, options);
1696
- if (details)
1697
- return details;
1698
- return getDatabaseBranch(defaultBranch, options);
2015
+ const branch = await getCurrentBranchName(options);
2016
+ return getDatabaseBranch(branch, options);
2017
+ }
2018
+ async function resolveXataBranch(gitBranch, options) {
2019
+ const databaseURL = options?.databaseURL || getDatabaseURL();
2020
+ const apiKey = options?.apiKey || getAPIKey();
2021
+ if (!databaseURL)
2022
+ throw new Error(
2023
+ "A databaseURL was not defined. Either set the XATA_DATABASE_URL env variable or pass the argument explicitely"
2024
+ );
2025
+ if (!apiKey)
2026
+ throw new Error(
2027
+ "An API key was not defined. Either set the XATA_API_KEY env variable or pass the argument explicitely"
2028
+ );
2029
+ const [protocol, , host, , dbName] = databaseURL.split("/");
2030
+ const [workspace] = host.split(".");
2031
+ const { fallbackBranch } = getEnvironment();
2032
+ const { branch } = await resolveBranch({
2033
+ apiKey,
2034
+ apiUrl: databaseURL,
2035
+ fetchImpl: getFetchImplementation(options?.fetchImpl),
2036
+ workspacesApiUrl: `${protocol}//${host}`,
2037
+ pathParams: { dbName, workspace },
2038
+ queryParams: { gitBranch, fallbackBranch },
2039
+ trace: defaultTrace
2040
+ });
2041
+ return branch;
1699
2042
  }
1700
2043
  async function getDatabaseBranch(branch, options) {
1701
2044
  const databaseURL = options?.databaseURL || getDatabaseURL();
1702
2045
  const apiKey = options?.apiKey || getAPIKey();
1703
2046
  if (!databaseURL)
1704
- throw new Error("A databaseURL was not defined. Either set the XATA_DATABASE_URL env variable or pass the argument explicitely");
2047
+ throw new Error(
2048
+ "A databaseURL was not defined. Either set the XATA_DATABASE_URL env variable or pass the argument explicitely"
2049
+ );
1705
2050
  if (!apiKey)
1706
- throw new Error("An API key was not defined. Either set the XATA_API_KEY env variable or pass the argument explicitely");
2051
+ throw new Error(
2052
+ "An API key was not defined. Either set the XATA_API_KEY env variable or pass the argument explicitely"
2053
+ );
1707
2054
  const [protocol, , host, , database] = databaseURL.split("/");
1708
2055
  const [workspace] = host.split(".");
1709
2056
  const dbBranchName = `${database}:${branch}`;
@@ -1713,10 +2060,8 @@ async function getDatabaseBranch(branch, options) {
1713
2060
  apiUrl: databaseURL,
1714
2061
  fetchImpl: getFetchImplementation(options?.fetchImpl),
1715
2062
  workspacesApiUrl: `${protocol}//${host}`,
1716
- pathParams: {
1717
- dbBranchName,
1718
- workspace
1719
- }
2063
+ pathParams: { dbBranchName, workspace },
2064
+ trace: defaultTrace
1720
2065
  });
1721
2066
  } catch (err) {
1722
2067
  if (isObject(err) && err.status === 404)
@@ -1724,21 +2069,10 @@ async function getDatabaseBranch(branch, options) {
1724
2069
  throw err;
1725
2070
  }
1726
2071
  }
1727
- function getBranchByEnvVariable() {
1728
- for (const name of envBranchNames) {
1729
- const value = getEnvVariable(name);
1730
- if (value) {
1731
- return value;
1732
- }
1733
- }
1734
- try {
1735
- return XATA_BRANCH;
1736
- } catch (err) {
1737
- }
1738
- }
1739
2072
  function getDatabaseURL() {
1740
2073
  try {
1741
- return getEnvVariable("XATA_DATABASE_URL") ?? XATA_DATABASE_URL;
2074
+ const { databaseURL } = getEnvironment();
2075
+ return databaseURL;
1742
2076
  } catch (err) {
1743
2077
  return void 0;
1744
2078
  }
@@ -1767,24 +2101,27 @@ var __privateMethod = (obj, member, method) => {
1767
2101
  return method;
1768
2102
  };
1769
2103
  const buildClient = (plugins) => {
1770
- var _branch, _parseOptions, parseOptions_fn, _getFetchProps, getFetchProps_fn, _evaluateBranch, evaluateBranch_fn, _a;
2104
+ var _branch, _options, _parseOptions, parseOptions_fn, _getFetchProps, getFetchProps_fn, _evaluateBranch, evaluateBranch_fn, _a;
1771
2105
  return _a = class {
1772
- constructor(options = {}, links, tables) {
2106
+ constructor(options = {}, schemaTables) {
1773
2107
  __privateAdd(this, _parseOptions);
1774
2108
  __privateAdd(this, _getFetchProps);
1775
2109
  __privateAdd(this, _evaluateBranch);
1776
2110
  __privateAdd(this, _branch, void 0);
2111
+ __privateAdd(this, _options, void 0);
1777
2112
  const safeOptions = __privateMethod(this, _parseOptions, parseOptions_fn).call(this, options);
2113
+ __privateSet(this, _options, safeOptions);
1778
2114
  const pluginOptions = {
1779
2115
  getFetchProps: () => __privateMethod(this, _getFetchProps, getFetchProps_fn).call(this, safeOptions),
1780
- cache: safeOptions.cache
2116
+ cache: safeOptions.cache,
2117
+ trace: safeOptions.trace
1781
2118
  };
1782
- const db = new SchemaPlugin(links, tables).build(pluginOptions);
1783
- const search = new SearchPlugin(db, links ?? {}).build(pluginOptions);
2119
+ const db = new SchemaPlugin(schemaTables).build(pluginOptions);
2120
+ const search = new SearchPlugin(db, schemaTables).build(pluginOptions);
1784
2121
  this.db = db;
1785
2122
  this.search = search;
1786
2123
  for (const [key, namespace] of Object.entries(plugins ?? {})) {
1787
- if (!namespace)
2124
+ if (namespace === void 0)
1788
2125
  continue;
1789
2126
  const result = namespace.build(pluginOptions);
1790
2127
  if (result instanceof Promise) {
@@ -1796,22 +2133,26 @@ const buildClient = (plugins) => {
1796
2133
  }
1797
2134
  }
1798
2135
  }
1799
- }, _branch = new WeakMap(), _parseOptions = new WeakSet(), parseOptions_fn = function(options) {
2136
+ async getConfig() {
2137
+ const databaseURL = __privateGet(this, _options).databaseURL;
2138
+ const branch = await __privateGet(this, _options).branch();
2139
+ return { databaseURL, branch };
2140
+ }
2141
+ }, _branch = new WeakMap(), _options = new WeakMap(), _parseOptions = new WeakSet(), parseOptions_fn = function(options) {
1800
2142
  const fetch = getFetchImplementation(options?.fetch);
1801
2143
  const databaseURL = options?.databaseURL || getDatabaseURL();
1802
2144
  const apiKey = options?.apiKey || getAPIKey();
1803
- const cache = options?.cache ?? new SimpleCache({ cacheRecords: false, defaultQueryTTL: 0 });
1804
- const branch = async () => options?.branch ? await __privateMethod(this, _evaluateBranch, evaluateBranch_fn).call(this, options.branch) : await getCurrentBranchName({ apiKey, databaseURL, fetchImpl: options?.fetch });
1805
- if (!databaseURL || !apiKey) {
1806
- throw new Error("Options databaseURL and apiKey are required");
2145
+ const cache = options?.cache ?? new SimpleCache({ defaultQueryTTL: 0 });
2146
+ const trace = options?.trace ?? defaultTrace;
2147
+ const branch = async () => options?.branch !== void 0 ? await __privateMethod(this, _evaluateBranch, evaluateBranch_fn).call(this, options.branch) : await getCurrentBranchName({ apiKey, databaseURL, fetchImpl: options?.fetch });
2148
+ if (!apiKey) {
2149
+ throw new Error("Option apiKey is required");
1807
2150
  }
1808
- return { fetch, databaseURL, apiKey, branch, cache };
1809
- }, _getFetchProps = new WeakSet(), getFetchProps_fn = async function({
1810
- fetch,
1811
- apiKey,
1812
- databaseURL,
1813
- branch
1814
- }) {
2151
+ if (!databaseURL) {
2152
+ throw new Error("Option databaseURL is required");
2153
+ }
2154
+ return { fetch, databaseURL, apiKey, branch, cache, trace };
2155
+ }, _getFetchProps = new WeakSet(), getFetchProps_fn = async function({ fetch, apiKey, databaseURL, branch, trace }) {
1815
2156
  const branchValue = await __privateMethod(this, _evaluateBranch, evaluateBranch_fn).call(this, branch);
1816
2157
  if (!branchValue)
1817
2158
  throw new Error("Unable to resolve branch value");
@@ -1823,12 +2164,13 @@ const buildClient = (plugins) => {
1823
2164
  const hasBranch = params.dbBranchName ?? params.branch;
1824
2165
  const newPath = path.replace(/^\/db\/[^/]+/, hasBranch ? `:${branchValue}` : "");
1825
2166
  return databaseURL + newPath;
1826
- }
2167
+ },
2168
+ trace
1827
2169
  };
1828
2170
  }, _evaluateBranch = new WeakSet(), evaluateBranch_fn = async function(param) {
1829
2171
  if (__privateGet(this, _branch))
1830
2172
  return __privateGet(this, _branch);
1831
- if (!param)
2173
+ if (param === void 0)
1832
2174
  return void 0;
1833
2175
  const strategies = Array.isArray(param) ? [...param] : [param];
1834
2176
  const evaluateBranch = async (strategy) => {
@@ -1846,6 +2188,88 @@ const buildClient = (plugins) => {
1846
2188
  class BaseClient extends buildClient() {
1847
2189
  }
1848
2190
 
2191
+ const META = "__";
2192
+ const VALUE = "___";
2193
+ class Serializer {
2194
+ constructor() {
2195
+ this.classes = {};
2196
+ }
2197
+ add(clazz) {
2198
+ this.classes[clazz.name] = clazz;
2199
+ }
2200
+ toJSON(data) {
2201
+ function visit(obj) {
2202
+ if (Array.isArray(obj))
2203
+ return obj.map(visit);
2204
+ const type = typeof obj;
2205
+ if (type === "undefined")
2206
+ return { [META]: "undefined" };
2207
+ if (type === "bigint")
2208
+ return { [META]: "bigint", [VALUE]: obj.toString() };
2209
+ if (obj === null || type !== "object")
2210
+ return obj;
2211
+ const constructor = obj.constructor;
2212
+ const o = { [META]: constructor.name };
2213
+ for (const [key, value] of Object.entries(obj)) {
2214
+ o[key] = visit(value);
2215
+ }
2216
+ if (constructor === Date)
2217
+ o[VALUE] = obj.toISOString();
2218
+ if (constructor === Map)
2219
+ o[VALUE] = Object.fromEntries(obj);
2220
+ if (constructor === Set)
2221
+ o[VALUE] = [...obj];
2222
+ return o;
2223
+ }
2224
+ return JSON.stringify(visit(data));
2225
+ }
2226
+ fromJSON(json) {
2227
+ return JSON.parse(json, (key, value) => {
2228
+ if (value && typeof value === "object" && !Array.isArray(value)) {
2229
+ const { [META]: clazz, [VALUE]: val, ...rest } = value;
2230
+ const constructor = this.classes[clazz];
2231
+ if (constructor) {
2232
+ return Object.assign(Object.create(constructor.prototype), rest);
2233
+ }
2234
+ if (clazz === "Date")
2235
+ return new Date(val);
2236
+ if (clazz === "Set")
2237
+ return new Set(val);
2238
+ if (clazz === "Map")
2239
+ return new Map(Object.entries(val));
2240
+ if (clazz === "bigint")
2241
+ return BigInt(val);
2242
+ if (clazz === "undefined")
2243
+ return void 0;
2244
+ return rest;
2245
+ }
2246
+ return value;
2247
+ });
2248
+ }
2249
+ }
2250
+ const defaultSerializer = new Serializer();
2251
+ const serialize = (data) => {
2252
+ return defaultSerializer.toJSON(data);
2253
+ };
2254
+ const deserialize = (json) => {
2255
+ return defaultSerializer.fromJSON(json);
2256
+ };
2257
+
2258
+ function buildWorkerRunner(config) {
2259
+ return function xataWorker(name, _worker) {
2260
+ return async (...args) => {
2261
+ const url = process.env.NODE_ENV === "development" ? `http://localhost:64749/${name}` : `https://dispatcher.xata.workers.dev/${config.workspace}/${config.worker}/${name}`;
2262
+ const result = await fetch(url, {
2263
+ method: "POST",
2264
+ headers: { "Content-Type": "application/json" },
2265
+ body: serialize({ args })
2266
+ });
2267
+ const text = await result.text();
2268
+ return deserialize(text);
2269
+ };
2270
+ };
2271
+ }
2272
+
1849
2273
  class XataError extends Error {
1850
2274
  constructor(message, status) {
1851
2275
  super(message);
@@ -1861,10 +2285,12 @@ exports.PAGINATION_MAX_OFFSET = PAGINATION_MAX_OFFSET;
1861
2285
  exports.PAGINATION_MAX_SIZE = PAGINATION_MAX_SIZE;
1862
2286
  exports.Page = Page;
1863
2287
  exports.Query = Query;
2288
+ exports.RecordArray = RecordArray;
1864
2289
  exports.Repository = Repository;
1865
2290
  exports.RestRepository = RestRepository;
1866
2291
  exports.SchemaPlugin = SchemaPlugin;
1867
2292
  exports.SearchPlugin = SearchPlugin;
2293
+ exports.Serializer = Serializer;
1868
2294
  exports.SimpleCache = SimpleCache;
1869
2295
  exports.XataApiClient = XataApiClient;
1870
2296
  exports.XataApiPlugin = XataApiPlugin;
@@ -1874,6 +2300,7 @@ exports.acceptWorkspaceMemberInvite = acceptWorkspaceMemberInvite;
1874
2300
  exports.addGitBranchesEntry = addGitBranchesEntry;
1875
2301
  exports.addTableColumn = addTableColumn;
1876
2302
  exports.buildClient = buildClient;
2303
+ exports.buildWorkerRunner = buildWorkerRunner;
1877
2304
  exports.bulkInsertTableRecords = bulkInsertTableRecords;
1878
2305
  exports.cancelWorkspaceMemberInvite = cancelWorkspaceMemberInvite;
1879
2306
  exports.contains = contains;
@@ -1890,7 +2317,9 @@ exports.deleteTable = deleteTable;
1890
2317
  exports.deleteUser = deleteUser;
1891
2318
  exports.deleteUserAPIKey = deleteUserAPIKey;
1892
2319
  exports.deleteWorkspace = deleteWorkspace;
2320
+ exports.deserialize = deserialize;
1893
2321
  exports.endsWith = endsWith;
2322
+ exports.equals = equals;
1894
2323
  exports.executeBranchMigrationPlan = executeBranchMigrationPlan;
1895
2324
  exports.exists = exists;
1896
2325
  exports.ge = ge;
@@ -1905,6 +2334,7 @@ exports.getColumn = getColumn;
1905
2334
  exports.getCurrentBranchDetails = getCurrentBranchDetails;
1906
2335
  exports.getCurrentBranchName = getCurrentBranchName;
1907
2336
  exports.getDatabaseList = getDatabaseList;
2337
+ exports.getDatabaseMetadata = getDatabaseMetadata;
1908
2338
  exports.getDatabaseURL = getDatabaseURL;
1909
2339
  exports.getGitBranchesMapping = getGitBranchesMapping;
1910
2340
  exports.getRecord = getRecord;
@@ -1915,6 +2345,9 @@ exports.getUserAPIKeys = getUserAPIKeys;
1915
2345
  exports.getWorkspace = getWorkspace;
1916
2346
  exports.getWorkspaceMembersList = getWorkspaceMembersList;
1917
2347
  exports.getWorkspacesList = getWorkspacesList;
2348
+ exports.greaterEquals = greaterEquals;
2349
+ exports.greaterThan = greaterThan;
2350
+ exports.greaterThanEquals = greaterThanEquals;
1918
2351
  exports.gt = gt;
1919
2352
  exports.gte = gte;
1920
2353
  exports.includes = includes;
@@ -1925,10 +2358,14 @@ exports.insertRecord = insertRecord;
1925
2358
  exports.insertRecordWithID = insertRecordWithID;
1926
2359
  exports.inviteWorkspaceMember = inviteWorkspaceMember;
1927
2360
  exports.is = is;
2361
+ exports.isCursorPaginationOptions = isCursorPaginationOptions;
1928
2362
  exports.isIdentifiable = isIdentifiable;
1929
2363
  exports.isNot = isNot;
1930
2364
  exports.isXataRecord = isXataRecord;
1931
2365
  exports.le = le;
2366
+ exports.lessEquals = lessEquals;
2367
+ exports.lessThan = lessThan;
2368
+ exports.lessThanEquals = lessThanEquals;
1932
2369
  exports.lt = lt;
1933
2370
  exports.lte = lte;
1934
2371
  exports.notExists = notExists;
@@ -1940,6 +2377,8 @@ exports.removeWorkspaceMember = removeWorkspaceMember;
1940
2377
  exports.resendWorkspaceMemberInvite = resendWorkspaceMemberInvite;
1941
2378
  exports.resolveBranch = resolveBranch;
1942
2379
  exports.searchBranch = searchBranch;
2380
+ exports.searchTable = searchTable;
2381
+ exports.serialize = serialize;
1943
2382
  exports.setTableSchema = setTableSchema;
1944
2383
  exports.startsWith = startsWith;
1945
2384
  exports.updateBranchMetadata = updateBranchMetadata;
@@ -1948,6 +2387,7 @@ exports.updateRecordWithID = updateRecordWithID;
1948
2387
  exports.updateTable = updateTable;
1949
2388
  exports.updateUser = updateUser;
1950
2389
  exports.updateWorkspace = updateWorkspace;
2390
+ exports.updateWorkspaceMemberInvite = updateWorkspaceMemberInvite;
1951
2391
  exports.updateWorkspaceMemberRole = updateWorkspaceMemberRole;
1952
2392
  exports.upsertRecordWithID = upsertRecordWithID;
1953
2393
  //# sourceMappingURL=index.cjs.map