@xata.io/client 0.0.0-alpha.vfde9dcf → 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
  }
@@ -17,43 +59,95 @@ function isDefined(value) {
17
59
  function isString(value) {
18
60
  return isDefined(value) && typeof value === "string";
19
61
  }
62
+ function isStringArray(value) {
63
+ return isDefined(value) && Array.isArray(value) && value.every(isString);
64
+ }
20
65
  function toBase64(value) {
21
66
  try {
22
67
  return btoa(value);
23
68
  } catch (err) {
24
- return Buffer.from(value).toString("base64");
69
+ const buf = Buffer;
70
+ return buf.from(value).toString("base64");
25
71
  }
26
72
  }
27
73
 
28
- function getEnvVariable(name) {
74
+ function getEnvironment() {
29
75
  try {
30
- if (isObject(process) && isString(process?.env?.[name])) {
31
- 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
+ };
32
84
  }
33
85
  } catch (err) {
34
86
  }
35
87
  try {
36
- if (isObject(Deno) && isString(Deno?.env?.get(name))) {
37
- 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
+ };
38
96
  }
39
97
  } catch (err) {
40
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
+ }
41
134
  }
42
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"] };
43
140
  try {
44
141
  if (typeof require === "function") {
45
- const req = require;
46
- return req("child_process").execSync("git branch --show-current", { encoding: "utf-8" }).trim();
142
+ return require(nodeModule).execSync(fullCmd, execOptions).trim();
47
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();
48
146
  } catch (err) {
49
147
  }
50
148
  try {
51
149
  if (isObject(Deno)) {
52
- const process2 = Deno.run({
53
- cmd: ["git", "branch", "--show-current"],
54
- stdout: "piped",
55
- stderr: "piped"
56
- });
150
+ const process2 = Deno.run({ cmd, stdout: "piped", stderr: "null" });
57
151
  return new TextDecoder().decode(await process2.output()).trim();
58
152
  }
59
153
  } catch (err) {
@@ -62,7 +156,8 @@ async function getGitBranch() {
62
156
 
63
157
  function getAPIKey() {
64
158
  try {
65
- return getEnvVariable("XATA_API_KEY") ?? XATA_API_KEY;
159
+ const { apiKey } = getEnvironment();
160
+ return apiKey;
66
161
  } catch (err) {
67
162
  return void 0;
68
163
  }
@@ -72,21 +167,35 @@ function getFetchImplementation(userFetch) {
72
167
  const globalFetch = typeof fetch !== "undefined" ? fetch : void 0;
73
168
  const fetchImpl = userFetch ?? globalFetch;
74
169
  if (!fetchImpl) {
75
- 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
+ );
76
173
  }
77
174
  return fetchImpl;
78
175
  }
79
176
 
80
- class FetcherError extends Error {
81
- 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) {
82
186
  super(getMessage(data));
83
187
  this.status = status;
84
188
  this.errors = isBulkError(data) ? data.errors : void 0;
189
+ this.requestId = requestId;
85
190
  if (data instanceof Error) {
86
191
  this.stack = data.stack;
87
192
  this.cause = data.cause;
88
193
  }
89
194
  }
195
+ toString() {
196
+ const error = super.toString();
197
+ return `[${this.status}] (${this.requestId ?? "Unknown"}): ${error}`;
198
+ }
90
199
  }
91
200
  function isBulkError(error) {
92
201
  return isObject(error) && Array.isArray(error.errors);
@@ -109,7 +218,12 @@ function getMessage(data) {
109
218
  }
110
219
 
111
220
  const resolveUrl = (url, queryParams = {}, pathParams = {}) => {
112
- 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();
113
227
  const queryString = query.length > 0 ? `?${query}` : "";
114
228
  return url.replace(/\{\w*\}/g, (key) => pathParams[key.slice(1, -1)]) + queryString;
115
229
  };
@@ -139,32 +253,62 @@ async function fetch$1({
139
253
  fetchImpl,
140
254
  apiKey,
141
255
  apiUrl,
142
- workspacesApiUrl
256
+ workspacesApiUrl,
257
+ trace
143
258
  }) {
144
- const baseUrl = buildBaseUrl({ path, workspacesApiUrl, pathParams, apiUrl });
145
- const fullUrl = resolveUrl(baseUrl, queryParams, pathParams);
146
- const url = fullUrl.includes("localhost") ? fullUrl.replace(/^[^.]+\./, "http://") : fullUrl;
147
- const response = await fetchImpl(url, {
148
- method: method.toUpperCase(),
149
- body: body ? JSON.stringify(body) : void 0,
150
- headers: {
151
- "Content-Type": "application/json",
152
- ...headers,
153
- ...hostHeader(fullUrl),
154
- Authorization: `Bearer ${apiKey}`
155
- }
156
- });
157
- if (response.status === 204) {
158
- return {};
159
- }
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) {
160
307
  try {
161
- const jsonResponse = await response.json();
162
- if (response.ok) {
163
- return jsonResponse;
164
- }
165
- throw new FetcherError(response.status, jsonResponse);
308
+ const { host, protocol } = new URL(url);
309
+ return { host, protocol };
166
310
  } catch (error) {
167
- throw new FetcherError(response.status, error);
311
+ return {};
168
312
  }
169
313
  }
170
314
 
@@ -223,6 +367,7 @@ const removeWorkspaceMember = (variables) => fetch$1({
223
367
  ...variables
224
368
  });
225
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 });
226
371
  const cancelWorkspaceMemberInvite = (variables) => fetch$1({
227
372
  url: "/workspaces/{workspaceId}/invites/{inviteId}",
228
373
  method: "delete",
@@ -258,6 +403,11 @@ const deleteDatabase = (variables) => fetch$1({
258
403
  method: "delete",
259
404
  ...variables
260
405
  });
406
+ const getDatabaseMetadata = (variables) => fetch$1({
407
+ url: "/dbs/{dbName}/metadata",
408
+ method: "get",
409
+ ...variables
410
+ });
261
411
  const getGitBranchesMapping = (variables) => fetch$1({ url: "/dbs/{dbName}/gitBranches", method: "get", ...variables });
262
412
  const addGitBranchesEntry = (variables) => fetch$1({ url: "/dbs/{dbName}/gitBranches", method: "post", ...variables });
263
413
  const removeGitBranchesEntry = (variables) => fetch$1({ url: "/dbs/{dbName}/gitBranches", method: "delete", ...variables });
@@ -271,11 +421,7 @@ const getBranchDetails = (variables) => fetch$1({
271
421
  method: "get",
272
422
  ...variables
273
423
  });
274
- const createBranch = (variables) => fetch$1({
275
- url: "/db/{dbBranchName}",
276
- method: "put",
277
- ...variables
278
- });
424
+ const createBranch = (variables) => fetch$1({ url: "/db/{dbBranchName}", method: "put", ...variables });
279
425
  const deleteBranch = (variables) => fetch$1({
280
426
  url: "/db/{dbBranchName}",
281
427
  method: "delete",
@@ -349,11 +495,7 @@ const updateColumn = (variables) => fetch$1({
349
495
  method: "patch",
350
496
  ...variables
351
497
  });
352
- const insertRecord = (variables) => fetch$1({
353
- url: "/db/{dbBranchName}/tables/{tableName}/data",
354
- method: "post",
355
- ...variables
356
- });
498
+ const insertRecord = (variables) => fetch$1({ url: "/db/{dbBranchName}/tables/{tableName}/data", method: "post", ...variables });
357
499
  const insertRecordWithID = (variables) => fetch$1({ url: "/db/{dbBranchName}/tables/{tableName}/data/{recordId}", method: "put", ...variables });
358
500
  const updateRecordWithID = (variables) => fetch$1({ url: "/db/{dbBranchName}/tables/{tableName}/data/{recordId}", method: "patch", ...variables });
359
501
  const upsertRecordWithID = (variables) => fetch$1({ url: "/db/{dbBranchName}/tables/{tableName}/data/{recordId}", method: "post", ...variables });
@@ -395,6 +537,7 @@ const operationsByTag = {
395
537
  updateWorkspaceMemberRole,
396
538
  removeWorkspaceMember,
397
539
  inviteWorkspaceMember,
540
+ updateWorkspaceMemberInvite,
398
541
  cancelWorkspaceMemberInvite,
399
542
  resendWorkspaceMemberInvite,
400
543
  acceptWorkspaceMemberInvite
@@ -403,6 +546,7 @@ const operationsByTag = {
403
546
  getDatabaseList,
404
547
  createDatabase,
405
548
  deleteDatabase,
549
+ getDatabaseMetadata,
406
550
  getGitBranchesMapping,
407
551
  addGitBranchesEntry,
408
552
  removeGitBranchesEntry,
@@ -484,7 +628,7 @@ var __privateAdd$7 = (obj, member, value) => {
484
628
  throw TypeError("Cannot add the same private member more than once");
485
629
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
486
630
  };
487
- var __privateSet$6 = (obj, member, value, setter) => {
631
+ var __privateSet$7 = (obj, member, value, setter) => {
488
632
  __accessCheck$7(obj, member, "write to private field");
489
633
  setter ? setter.call(obj, value) : member.set(obj, value);
490
634
  return value;
@@ -495,15 +639,17 @@ class XataApiClient {
495
639
  __privateAdd$7(this, _extraProps, void 0);
496
640
  __privateAdd$7(this, _namespaces, {});
497
641
  const provider = options.host ?? "production";
498
- const apiKey = options?.apiKey ?? getAPIKey();
642
+ const apiKey = options.apiKey ?? getAPIKey();
643
+ const trace = options.trace ?? defaultTrace;
499
644
  if (!apiKey) {
500
645
  throw new Error("Could not resolve a valid apiKey");
501
646
  }
502
- __privateSet$6(this, _extraProps, {
647
+ __privateSet$7(this, _extraProps, {
503
648
  apiUrl: getHostUrl(provider, "main"),
504
649
  workspacesApiUrl: getHostUrl(provider, "workspaces"),
505
650
  fetchImpl: getFetchImplementation(options.fetch),
506
- apiKey
651
+ apiKey,
652
+ trace
507
653
  });
508
654
  }
509
655
  get user() {
@@ -626,6 +772,13 @@ class WorkspaceApi {
626
772
  ...this.extraProps
627
773
  });
628
774
  }
775
+ updateWorkspaceMemberInvite(workspaceId, inviteId, role) {
776
+ return operationsByTag.workspaces.updateWorkspaceMemberInvite({
777
+ pathParams: { workspaceId, inviteId },
778
+ body: { role },
779
+ ...this.extraProps
780
+ });
781
+ }
629
782
  cancelWorkspaceMemberInvite(workspaceId, inviteId) {
630
783
  return operationsByTag.workspaces.cancelWorkspaceMemberInvite({
631
784
  pathParams: { workspaceId, inviteId },
@@ -668,6 +821,12 @@ class DatabaseApi {
668
821
  ...this.extraProps
669
822
  });
670
823
  }
824
+ getDatabaseMetadata(workspace, dbName) {
825
+ return operationsByTag.database.getDatabaseMetadata({
826
+ pathParams: { workspace, dbName },
827
+ ...this.extraProps
828
+ });
829
+ }
671
830
  getGitBranchesMapping(workspace, dbName) {
672
831
  return operationsByTag.database.getGitBranchesMapping({
673
832
  pathParams: { workspace, dbName },
@@ -688,10 +847,10 @@ class DatabaseApi {
688
847
  ...this.extraProps
689
848
  });
690
849
  }
691
- resolveBranch(workspace, dbName, gitBranch) {
850
+ resolveBranch(workspace, dbName, gitBranch, fallbackBranch) {
692
851
  return operationsByTag.database.resolveBranch({
693
852
  pathParams: { workspace, dbName },
694
- queryParams: { gitBranch },
853
+ queryParams: { gitBranch, fallbackBranch },
695
854
  ...this.extraProps
696
855
  });
697
856
  }
@@ -840,9 +999,10 @@ class RecordsApi {
840
999
  constructor(extraProps) {
841
1000
  this.extraProps = extraProps;
842
1001
  }
843
- insertRecord(workspace, database, branch, tableName, record) {
1002
+ insertRecord(workspace, database, branch, tableName, record, options = {}) {
844
1003
  return operationsByTag.records.insertRecord({
845
1004
  pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },
1005
+ queryParams: options,
846
1006
  body: record,
847
1007
  ...this.extraProps
848
1008
  });
@@ -871,21 +1031,24 @@ class RecordsApi {
871
1031
  ...this.extraProps
872
1032
  });
873
1033
  }
874
- deleteRecord(workspace, database, branch, tableName, recordId) {
1034
+ deleteRecord(workspace, database, branch, tableName, recordId, options = {}) {
875
1035
  return operationsByTag.records.deleteRecord({
876
1036
  pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, recordId },
1037
+ queryParams: options,
877
1038
  ...this.extraProps
878
1039
  });
879
1040
  }
880
1041
  getRecord(workspace, database, branch, tableName, recordId, options = {}) {
881
1042
  return operationsByTag.records.getRecord({
882
1043
  pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, recordId },
1044
+ queryParams: options,
883
1045
  ...this.extraProps
884
1046
  });
885
1047
  }
886
- bulkInsertTableRecords(workspace, database, branch, tableName, records) {
1048
+ bulkInsertTableRecords(workspace, database, branch, tableName, records, options = {}) {
887
1049
  return operationsByTag.records.bulkInsertTableRecords({
888
1050
  pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },
1051
+ queryParams: options,
889
1052
  body: { records },
890
1053
  ...this.extraProps
891
1054
  });
@@ -936,18 +1099,18 @@ var __privateAdd$6 = (obj, member, value) => {
936
1099
  throw TypeError("Cannot add the same private member more than once");
937
1100
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
938
1101
  };
939
- var __privateSet$5 = (obj, member, value, setter) => {
1102
+ var __privateSet$6 = (obj, member, value, setter) => {
940
1103
  __accessCheck$6(obj, member, "write to private field");
941
1104
  setter ? setter.call(obj, value) : member.set(obj, value);
942
1105
  return value;
943
1106
  };
944
- var _query;
1107
+ var _query, _page;
945
1108
  class Page {
946
1109
  constructor(query, meta, records = []) {
947
1110
  __privateAdd$6(this, _query, void 0);
948
- __privateSet$5(this, _query, query);
1111
+ __privateSet$6(this, _query, query);
949
1112
  this.meta = meta;
950
- this.records = records;
1113
+ this.records = new RecordArray(this, records);
951
1114
  }
952
1115
  async nextPage(size, offset) {
953
1116
  return __privateGet$6(this, _query).getPaginated({ pagination: { size, offset, after: this.meta.page.cursor } });
@@ -967,12 +1130,56 @@ class Page {
967
1130
  }
968
1131
  _query = new WeakMap();
969
1132
  const PAGINATION_MAX_SIZE = 200;
970
- const PAGINATION_DEFAULT_SIZE = 200;
1133
+ const PAGINATION_DEFAULT_SIZE = 20;
971
1134
  const PAGINATION_MAX_OFFSET = 800;
972
1135
  const PAGINATION_DEFAULT_OFFSET = 0;
973
1136
  function isCursorPaginationOptions(options) {
974
1137
  return isDefined(options) && (isDefined(options.first) || isDefined(options.last) || isDefined(options.after) || isDefined(options.before));
975
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();
976
1183
 
977
1184
  var __accessCheck$5 = (obj, member, msg) => {
978
1185
  if (!member.has(obj))
@@ -987,25 +1194,26 @@ var __privateAdd$5 = (obj, member, value) => {
987
1194
  throw TypeError("Cannot add the same private member more than once");
988
1195
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
989
1196
  };
990
- var __privateSet$4 = (obj, member, value, setter) => {
1197
+ var __privateSet$5 = (obj, member, value, setter) => {
991
1198
  __accessCheck$5(obj, member, "write to private field");
992
1199
  setter ? setter.call(obj, value) : member.set(obj, value);
993
1200
  return value;
994
1201
  };
995
1202
  var _table$1, _repository, _data;
996
1203
  const _Query = class {
997
- constructor(repository, table, data, parent) {
1204
+ constructor(repository, table, data, rawParent) {
998
1205
  __privateAdd$5(this, _table$1, void 0);
999
1206
  __privateAdd$5(this, _repository, void 0);
1000
1207
  __privateAdd$5(this, _data, { filter: {} });
1001
1208
  this.meta = { page: { cursor: "start", more: true } };
1002
- this.records = [];
1003
- __privateSet$4(this, _table$1, table);
1209
+ this.records = new RecordArray(this, []);
1210
+ __privateSet$5(this, _table$1, table);
1004
1211
  if (repository) {
1005
- __privateSet$4(this, _repository, repository);
1212
+ __privateSet$5(this, _repository, repository);
1006
1213
  } else {
1007
- __privateSet$4(this, _repository, this);
1214
+ __privateSet$5(this, _repository, this);
1008
1215
  }
1216
+ const parent = cleanParent(data, rawParent);
1009
1217
  __privateGet$5(this, _data).filter = data.filter ?? parent?.filter ?? {};
1010
1218
  __privateGet$5(this, _data).filter.$any = data.filter?.$any ?? parent?.filter?.$any;
1011
1219
  __privateGet$5(this, _data).filter.$all = data.filter?.$all ?? parent?.filter?.$all;
@@ -1058,13 +1266,18 @@ const _Query = class {
1058
1266
  return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { filter: { $all } }, __privateGet$5(this, _data));
1059
1267
  }
1060
1268
  }
1061
- sort(column, direction) {
1269
+ sort(column, direction = "asc") {
1062
1270
  const originalSort = [__privateGet$5(this, _data).sort ?? []].flat();
1063
1271
  const sort = [...originalSort, { column, direction }];
1064
1272
  return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { sort }, __privateGet$5(this, _data));
1065
1273
  }
1066
1274
  select(columns) {
1067
- return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { columns }, __privateGet$5(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
+ );
1068
1281
  }
1069
1282
  getPaginated(options = {}) {
1070
1283
  const query = new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), options, __privateGet$5(this, _data));
@@ -1087,8 +1300,11 @@ const _Query = class {
1087
1300
  }
1088
1301
  }
1089
1302
  async getMany(options = {}) {
1090
- const { records } = await this.getPaginated(options);
1091
- 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;
1092
1308
  }
1093
1309
  async getAll(options = {}) {
1094
1310
  const { batchSize = PAGINATION_MAX_SIZE, ...rest } = options;
@@ -1125,12 +1341,20 @@ let Query = _Query;
1125
1341
  _table$1 = new WeakMap();
1126
1342
  _repository = new WeakMap();
1127
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
+ }
1128
1350
 
1129
1351
  function isIdentifiable(x) {
1130
1352
  return isObject(x) && isString(x?.id);
1131
1353
  }
1132
1354
  function isXataRecord(x) {
1133
- 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";
1134
1358
  }
1135
1359
 
1136
1360
  function isSortFilterString(value) {
@@ -1169,7 +1393,7 @@ var __privateAdd$4 = (obj, member, value) => {
1169
1393
  throw TypeError("Cannot add the same private member more than once");
1170
1394
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
1171
1395
  };
1172
- var __privateSet$3 = (obj, member, value, setter) => {
1396
+ var __privateSet$4 = (obj, member, value, setter) => {
1173
1397
  __accessCheck$4(obj, member, "write to private field");
1174
1398
  setter ? setter.call(obj, value) : member.set(obj, value);
1175
1399
  return value;
@@ -1178,7 +1402,7 @@ var __privateMethod$2 = (obj, member, method) => {
1178
1402
  __accessCheck$4(obj, member, "access private method");
1179
1403
  return method;
1180
1404
  };
1181
- var _table, _getFetchProps, _cache, _schema$1, _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, _getSchema$1, getSchema_fn$1;
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;
1182
1406
  class Repository extends Query {
1183
1407
  }
1184
1408
  class RestRepository extends Query {
@@ -1190,175 +1414,214 @@ class RestRepository extends Query {
1190
1414
  __privateAdd$4(this, _updateRecordWithID);
1191
1415
  __privateAdd$4(this, _upsertRecordWithID);
1192
1416
  __privateAdd$4(this, _deleteRecord);
1193
- __privateAdd$4(this, _invalidateCache);
1194
- __privateAdd$4(this, _setCacheRecord);
1195
- __privateAdd$4(this, _getCacheRecord);
1196
1417
  __privateAdd$4(this, _setCacheQuery);
1197
1418
  __privateAdd$4(this, _getCacheQuery);
1198
- __privateAdd$4(this, _getSchema$1);
1419
+ __privateAdd$4(this, _getSchemaTables$1);
1199
1420
  __privateAdd$4(this, _table, void 0);
1200
1421
  __privateAdd$4(this, _getFetchProps, void 0);
1422
+ __privateAdd$4(this, _db, void 0);
1201
1423
  __privateAdd$4(this, _cache, void 0);
1202
- __privateAdd$4(this, _schema$1, void 0);
1203
- __privateSet$3(this, _table, options.table);
1204
- __privateSet$3(this, _getFetchProps, options.pluginOptions.getFetchProps);
1205
- this.db = options.db;
1206
- __privateSet$3(this, _cache, options.pluginOptions.cache);
1207
- }
1208
- async create(a, b) {
1209
- if (Array.isArray(a)) {
1210
- const records = await __privateMethod$2(this, _bulkInsertTableRecords, bulkInsertTableRecords_fn).call(this, a);
1211
- await Promise.all(records.map((record) => __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record)));
1212
- return records;
1213
- }
1214
- if (isString(a) && isObject(b)) {
1215
- if (a === "")
1216
- throw new Error("The id can't be empty");
1217
- const record = await __privateMethod$2(this, _insertRecordWithId, insertRecordWithId_fn).call(this, a, b);
1218
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1219
- return record;
1220
- }
1221
- if (isObject(a) && isString(a.id)) {
1222
- if (a.id === "")
1223
- throw new Error("The id can't be empty");
1224
- const record = await __privateMethod$2(this, _insertRecordWithId, insertRecordWithId_fn).call(this, a.id, { ...a, id: void 0 });
1225
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1226
- return record;
1227
- }
1228
- if (isObject(a)) {
1229
- const record = await __privateMethod$2(this, _insertRecordWithoutId, insertRecordWithoutId_fn).call(this, a);
1230
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1231
- return record;
1232
- }
1233
- throw new Error("Invalid arguments for create method");
1234
- }
1235
- async read(recordId) {
1236
- const cacheRecord = await __privateMethod$2(this, _getCacheRecord, getCacheRecord_fn).call(this, recordId);
1237
- if (cacheRecord)
1238
- return cacheRecord;
1239
- const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1240
- try {
1241
- const response = await getRecord({
1242
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table), recordId },
1243
- ...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
1244
1437
  });
1245
- const schema = await __privateMethod$2(this, _getSchema$1, getSchema_fn$1).call(this);
1246
- return initObject(this.db, schema, __privateGet$4(this, _table), response);
1247
- } catch (e) {
1248
- if (isObject(e) && e.status === 404) {
1249
- 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);
1250
1447
  }
1251
- throw e;
1252
- }
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
+ });
1253
1466
  }
1254
- async update(a, b) {
1255
- if (Array.isArray(a)) {
1256
- if (a.length > 100) {
1257
- 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);
1258
1480
  }
1259
- return Promise.all(a.map((object) => this.update(object)));
1260
- }
1261
- if (isString(a) && isObject(b)) {
1262
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a);
1263
- const record = await __privateMethod$2(this, _updateRecordWithID, updateRecordWithID_fn).call(this, a, b);
1264
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1265
- return record;
1266
- }
1267
- if (isObject(a) && isString(a.id)) {
1268
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a.id);
1269
- const record = await __privateMethod$2(this, _updateRecordWithID, updateRecordWithID_fn).call(this, a.id, { ...a, id: void 0 });
1270
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1271
- return record;
1272
- }
1273
- 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
+ });
1274
1506
  }
1275
- async createOrUpdate(a, b) {
1276
- if (Array.isArray(a)) {
1277
- if (a.length > 100) {
1278
- 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)));
1279
1517
  }
1280
- return Promise.all(a.map((object) => this.createOrUpdate(object)));
1281
- }
1282
- if (isString(a) && isObject(b)) {
1283
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a);
1284
- const record = await __privateMethod$2(this, _upsertRecordWithID, upsertRecordWithID_fn).call(this, a, b);
1285
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1286
- return record;
1287
- }
1288
- if (isObject(a) && isString(a.id)) {
1289
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a.id);
1290
- const record = await __privateMethod$2(this, _upsertRecordWithID, upsertRecordWithID_fn).call(this, a.id, { ...a, id: void 0 });
1291
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1292
- return record;
1293
- }
1294
- 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
+ });
1295
1550
  }
1296
1551
  async delete(a) {
1297
- if (Array.isArray(a)) {
1298
- if (a.length > 100) {
1299
- 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;
1300
1561
  }
1301
- await Promise.all(a.map((id) => this.delete(id)));
1302
- return;
1303
- }
1304
- if (isString(a)) {
1305
- await __privateMethod$2(this, _deleteRecord, deleteRecord_fn).call(this, a);
1306
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a);
1307
- return;
1308
- }
1309
- if (isObject(a) && isString(a.id)) {
1310
- await __privateMethod$2(this, _deleteRecord, deleteRecord_fn).call(this, a.id);
1311
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a.id);
1312
- return;
1313
- }
1314
- 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
+ });
1315
1572
  }
1316
1573
  async search(query, options = {}) {
1317
- const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1318
- const { records } = await searchTable({
1319
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table) },
1320
- body: {
1321
- query,
1322
- fuzziness: options.fuzziness,
1323
- filter: options.filter
1324
- },
1325
- ...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));
1326
1590
  });
1327
- const schema = await __privateMethod$2(this, _getSchema$1, getSchema_fn$1).call(this);
1328
- return records.map((item) => initObject(this.db, schema, __privateGet$4(this, _table), item));
1329
1591
  }
1330
1592
  async query(query) {
1331
- const cacheQuery = await __privateMethod$2(this, _getCacheQuery, getCacheQuery_fn).call(this, query);
1332
- if (cacheQuery)
1333
- return new Page(query, cacheQuery.meta, cacheQuery.records);
1334
- const data = query.getQueryOptions();
1335
- const filter = Object.values(data.filter ?? {}).some(Boolean) ? data.filter : void 0;
1336
- const sort = data.sort !== void 0 ? buildSortFilter(data.sort) : void 0;
1337
- const isCursorPagination = isCursorPaginationOptions(data.pagination);
1338
- const body = {
1339
- filter: isCursorPagination ? void 0 : filter,
1340
- sort: isCursorPagination ? void 0 : sort,
1341
- page: data.pagination,
1342
- columns: data.columns
1343
- };
1344
- const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1345
- const { meta, records: objects } = await queryTable({
1346
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table) },
1347
- body,
1348
- ...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);
1349
1614
  });
1350
- const schema = await __privateMethod$2(this, _getSchema$1, getSchema_fn$1).call(this);
1351
- const records = objects.map((record) => initObject(this.db, schema, __privateGet$4(this, _table), record));
1352
- await __privateMethod$2(this, _setCacheQuery, setCacheQuery_fn).call(this, query, meta, records);
1353
- return new Page(query, meta, records);
1354
1615
  }
1355
1616
  }
1356
1617
  _table = new WeakMap();
1357
1618
  _getFetchProps = new WeakMap();
1619
+ _db = new WeakMap();
1358
1620
  _cache = new WeakMap();
1359
- _schema$1 = new WeakMap();
1621
+ _schemaTables$2 = new WeakMap();
1622
+ _trace = new WeakMap();
1360
1623
  _insertRecordWithoutId = new WeakSet();
1361
- insertRecordWithoutId_fn = async function(object) {
1624
+ insertRecordWithoutId_fn = async function(object, columns = ["*"]) {
1362
1625
  const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1363
1626
  const record = transformObjectLinks(object);
1364
1627
  const response = await insertRecord({
@@ -1367,17 +1630,15 @@ insertRecordWithoutId_fn = async function(object) {
1367
1630
  dbBranchName: "{dbBranch}",
1368
1631
  tableName: __privateGet$4(this, _table)
1369
1632
  },
1633
+ queryParams: { columns },
1370
1634
  body: record,
1371
1635
  ...fetchProps
1372
1636
  });
1373
- const finalObject = await this.read(response.id);
1374
- if (!finalObject) {
1375
- throw new Error("The server failed to save the record");
1376
- }
1377
- 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);
1378
1639
  };
1379
1640
  _insertRecordWithId = new WeakSet();
1380
- insertRecordWithId_fn = async function(recordId, object) {
1641
+ insertRecordWithId_fn = async function(recordId, object, columns = ["*"]) {
1381
1642
  const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1382
1643
  const record = transformObjectLinks(object);
1383
1644
  const response = await insertRecordWithID({
@@ -1388,56 +1649,52 @@ insertRecordWithId_fn = async function(recordId, object) {
1388
1649
  recordId
1389
1650
  },
1390
1651
  body: record,
1391
- queryParams: { createOnly: true },
1652
+ queryParams: { createOnly: true, columns },
1392
1653
  ...fetchProps
1393
1654
  });
1394
- const finalObject = await this.read(response.id);
1395
- if (!finalObject) {
1396
- throw new Error("The server failed to save the record");
1397
- }
1398
- 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);
1399
1657
  };
1400
1658
  _bulkInsertTableRecords = new WeakSet();
1401
- bulkInsertTableRecords_fn = async function(objects) {
1659
+ bulkInsertTableRecords_fn = async function(objects, columns = ["*"]) {
1402
1660
  const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1403
1661
  const records = objects.map((object) => transformObjectLinks(object));
1404
1662
  const response = await bulkInsertTableRecords({
1405
1663
  pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table) },
1664
+ queryParams: { columns },
1406
1665
  body: { records },
1407
1666
  ...fetchProps
1408
1667
  });
1409
- const finalObjects = await this.any(...response.recordIDs.map((id) => this.filter("id", id))).getAll();
1410
- if (finalObjects.length !== objects.length) {
1411
- 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");
1412
1670
  }
1413
- 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));
1414
1673
  };
1415
1674
  _updateRecordWithID = new WeakSet();
1416
- updateRecordWithID_fn = async function(recordId, object) {
1675
+ updateRecordWithID_fn = async function(recordId, object, columns = ["*"]) {
1417
1676
  const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1418
1677
  const record = transformObjectLinks(object);
1419
1678
  const response = await updateRecordWithID({
1420
1679
  pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table), recordId },
1680
+ queryParams: { columns },
1421
1681
  body: record,
1422
1682
  ...fetchProps
1423
1683
  });
1424
- const item = await this.read(response.id);
1425
- if (!item)
1426
- throw new Error("The server failed to save the record");
1427
- 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);
1428
1686
  };
1429
1687
  _upsertRecordWithID = new WeakSet();
1430
- upsertRecordWithID_fn = async function(recordId, object) {
1688
+ upsertRecordWithID_fn = async function(recordId, object, columns = ["*"]) {
1431
1689
  const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1432
1690
  const response = await upsertRecordWithID({
1433
1691
  pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table), recordId },
1692
+ queryParams: { columns },
1434
1693
  body: object,
1435
1694
  ...fetchProps
1436
1695
  });
1437
- const item = await this.read(response.id);
1438
- if (!item)
1439
- throw new Error("The server failed to save the record");
1440
- 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);
1441
1698
  };
1442
1699
  _deleteRecord = new WeakSet();
1443
1700
  deleteRecord_fn = async function(recordId) {
@@ -1447,29 +1704,6 @@ deleteRecord_fn = async function(recordId) {
1447
1704
  ...fetchProps
1448
1705
  });
1449
1706
  };
1450
- _invalidateCache = new WeakSet();
1451
- invalidateCache_fn = async function(recordId) {
1452
- await __privateGet$4(this, _cache).delete(`rec_${__privateGet$4(this, _table)}:${recordId}`);
1453
- const cacheItems = await __privateGet$4(this, _cache).getAll();
1454
- const queries = Object.entries(cacheItems).filter(([key]) => key.startsWith("query_"));
1455
- for (const [key, value] of queries) {
1456
- const ids = getIds(value);
1457
- if (ids.includes(recordId))
1458
- await __privateGet$4(this, _cache).delete(key);
1459
- }
1460
- };
1461
- _setCacheRecord = new WeakSet();
1462
- setCacheRecord_fn = async function(record) {
1463
- if (!__privateGet$4(this, _cache).cacheRecords)
1464
- return;
1465
- await __privateGet$4(this, _cache).set(`rec_${__privateGet$4(this, _table)}:${record.id}`, record);
1466
- };
1467
- _getCacheRecord = new WeakSet();
1468
- getCacheRecord_fn = async function(recordId) {
1469
- if (!__privateGet$4(this, _cache).cacheRecords)
1470
- return null;
1471
- return __privateGet$4(this, _cache).get(`rec_${__privateGet$4(this, _table)}:${recordId}`);
1472
- };
1473
1707
  _setCacheQuery = new WeakSet();
1474
1708
  setCacheQuery_fn = async function(query, meta, records) {
1475
1709
  await __privateGet$4(this, _cache).set(`query_${__privateGet$4(this, _table)}:${query.key()}`, { date: new Date(), meta, records });
@@ -1486,17 +1720,17 @@ getCacheQuery_fn = async function(query) {
1486
1720
  const hasExpired = result.date.getTime() + ttl < Date.now();
1487
1721
  return hasExpired ? null : result;
1488
1722
  };
1489
- _getSchema$1 = new WeakSet();
1490
- getSchema_fn$1 = async function() {
1491
- if (__privateGet$4(this, _schema$1))
1492
- return __privateGet$4(this, _schema$1);
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);
1493
1727
  const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1494
1728
  const { schema } = await getBranchDetails({
1495
1729
  pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}" },
1496
1730
  ...fetchProps
1497
1731
  });
1498
- __privateSet$3(this, _schema$1, schema);
1499
- return schema;
1732
+ __privateSet$4(this, _schemaTables$2, schema.tables);
1733
+ return schema.tables;
1500
1734
  };
1501
1735
  const transformObjectLinks = (object) => {
1502
1736
  return Object.entries(object).reduce((acc, [key, value]) => {
@@ -1505,20 +1739,21 @@ const transformObjectLinks = (object) => {
1505
1739
  return { ...acc, [key]: isIdentifiable(value) ? value.id : value };
1506
1740
  }, {});
1507
1741
  };
1508
- const initObject = (db, schema, table, object) => {
1742
+ const initObject = (db, schemaTables, table, object) => {
1509
1743
  const result = {};
1510
- Object.assign(result, object);
1511
- const { columns } = schema.tables.find(({ name }) => name === table) ?? {};
1744
+ const { xata, ...rest } = object ?? {};
1745
+ Object.assign(result, rest);
1746
+ const { columns } = schemaTables.find(({ name }) => name === table) ?? {};
1512
1747
  if (!columns)
1513
1748
  console.error(`Table ${table} not found in schema`);
1514
1749
  for (const column of columns ?? []) {
1515
1750
  const value = result[column.name];
1516
1751
  switch (column.type) {
1517
1752
  case "datetime": {
1518
- const date = new Date(value);
1519
- if (isNaN(date.getTime())) {
1753
+ const date = value !== void 0 ? new Date(value) : void 0;
1754
+ if (date && isNaN(date.getTime())) {
1520
1755
  console.error(`Failed to parse date ${value} for field ${column.name}`);
1521
- } else {
1756
+ } else if (date) {
1522
1757
  result[column.name] = date;
1523
1758
  }
1524
1759
  break;
@@ -1528,35 +1763,32 @@ const initObject = (db, schema, table, object) => {
1528
1763
  if (!linkTable) {
1529
1764
  console.error(`Failed to parse link for field ${column.name}`);
1530
1765
  } else if (isObject(value)) {
1531
- result[column.name] = initObject(db, schema, linkTable, value);
1766
+ result[column.name] = initObject(db, schemaTables, linkTable, value);
1532
1767
  }
1533
1768
  break;
1534
1769
  }
1535
1770
  }
1536
1771
  }
1537
- result.read = function() {
1538
- return db[table].read(result["id"]);
1772
+ result.read = function(columns2) {
1773
+ return db[table].read(result["id"], columns2);
1539
1774
  };
1540
- result.update = function(data) {
1541
- return db[table].update(result["id"], data);
1775
+ result.update = function(data, columns2) {
1776
+ return db[table].update(result["id"], data, columns2);
1542
1777
  };
1543
1778
  result.delete = function() {
1544
1779
  return db[table].delete(result["id"]);
1545
1780
  };
1546
- for (const prop of ["read", "update", "delete"]) {
1781
+ result.getMetadata = function() {
1782
+ return xata;
1783
+ };
1784
+ for (const prop of ["read", "update", "delete", "getMetadata"]) {
1547
1785
  Object.defineProperty(result, prop, { enumerable: false });
1548
1786
  }
1549
1787
  Object.freeze(result);
1550
1788
  return result;
1551
1789
  };
1552
- function getIds(value) {
1553
- if (Array.isArray(value)) {
1554
- return value.map((item) => getIds(item)).flat();
1555
- }
1556
- if (!isObject(value))
1557
- return [];
1558
- const nestedIds = Object.values(value).map((item) => getIds(item)).flat();
1559
- return isString(value.id) ? [value.id, ...nestedIds] : nestedIds;
1790
+ function isResponseWithRecords(value) {
1791
+ return isObject(value) && Array.isArray(value.records);
1560
1792
  }
1561
1793
 
1562
1794
  var __accessCheck$3 = (obj, member, msg) => {
@@ -1572,7 +1804,7 @@ var __privateAdd$3 = (obj, member, value) => {
1572
1804
  throw TypeError("Cannot add the same private member more than once");
1573
1805
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
1574
1806
  };
1575
- var __privateSet$2 = (obj, member, value, setter) => {
1807
+ var __privateSet$3 = (obj, member, value, setter) => {
1576
1808
  __accessCheck$3(obj, member, "write to private field");
1577
1809
  setter ? setter.call(obj, value) : member.set(obj, value);
1578
1810
  return value;
@@ -1581,9 +1813,8 @@ var _map;
1581
1813
  class SimpleCache {
1582
1814
  constructor(options = {}) {
1583
1815
  __privateAdd$3(this, _map, void 0);
1584
- __privateSet$2(this, _map, /* @__PURE__ */ new Map());
1816
+ __privateSet$3(this, _map, /* @__PURE__ */ new Map());
1585
1817
  this.capacity = options.max ?? 500;
1586
- this.cacheRecords = options.cacheRecords ?? true;
1587
1818
  this.defaultQueryTTL = options.defaultQueryTTL ?? 60 * 1e3;
1588
1819
  }
1589
1820
  async getAll() {
@@ -1609,18 +1840,25 @@ class SimpleCache {
1609
1840
  }
1610
1841
  _map = new WeakMap();
1611
1842
 
1612
- const gt = (value) => ({ $gt: value });
1613
- const ge = (value) => ({ $ge: value });
1614
- const gte = (value) => ({ $ge: value });
1615
- const lt = (value) => ({ $lt: value });
1616
- const lte = (value) => ({ $le: value });
1617
- 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;
1618
1855
  const exists = (column) => ({ $exists: column });
1619
1856
  const notExists = (column) => ({ $notExists: column });
1620
1857
  const startsWith = (value) => ({ $startsWith: value });
1621
1858
  const endsWith = (value) => ({ $endsWith: value });
1622
1859
  const pattern = (value) => ({ $pattern: value });
1623
1860
  const is = (value) => ({ $is: value });
1861
+ const equals = is;
1624
1862
  const isNot = (value) => ({ $isNot: value });
1625
1863
  const contains = (value) => ({ $contains: value });
1626
1864
  const includes = (value) => ({ $includes: value });
@@ -1641,31 +1879,42 @@ var __privateAdd$2 = (obj, member, value) => {
1641
1879
  throw TypeError("Cannot add the same private member more than once");
1642
1880
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
1643
1881
  };
1644
- 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;
1645
1888
  class SchemaPlugin extends XataPlugin {
1646
- constructor(tableNames) {
1889
+ constructor(schemaTables) {
1647
1890
  super();
1648
- this.tableNames = tableNames;
1649
1891
  __privateAdd$2(this, _tables, {});
1892
+ __privateAdd$2(this, _schemaTables$1, void 0);
1893
+ __privateSet$2(this, _schemaTables$1, schemaTables);
1650
1894
  }
1651
1895
  build(pluginOptions) {
1652
- const db = new Proxy({}, {
1653
- get: (_target, table) => {
1654
- if (!isString(table))
1655
- throw new Error("Invalid table name");
1656
- if (__privateGet$2(this, _tables)[table] === void 0) {
1657
- __privateGet$2(this, _tables)[table] = new RestRepository({ db, pluginOptions, table });
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];
1658
1906
  }
1659
- return __privateGet$2(this, _tables)[table];
1660
1907
  }
1661
- });
1662
- for (const table of this.tableNames ?? []) {
1663
- db[table] = new RestRepository({ db, pluginOptions, table });
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) });
1664
1912
  }
1665
1913
  return db;
1666
1914
  }
1667
1915
  }
1668
1916
  _tables = new WeakMap();
1917
+ _schemaTables$1 = new WeakMap();
1669
1918
 
1670
1919
  var __accessCheck$1 = (obj, member, msg) => {
1671
1920
  if (!member.has(obj))
@@ -1689,82 +1938,77 @@ var __privateMethod$1 = (obj, member, method) => {
1689
1938
  __accessCheck$1(obj, member, "access private method");
1690
1939
  return method;
1691
1940
  };
1692
- var _schema, _search, search_fn, _getSchema, getSchema_fn;
1941
+ var _schemaTables, _search, search_fn, _getSchemaTables, getSchemaTables_fn;
1693
1942
  class SearchPlugin extends XataPlugin {
1694
- constructor(db) {
1943
+ constructor(db, schemaTables) {
1695
1944
  super();
1696
1945
  this.db = db;
1697
1946
  __privateAdd$1(this, _search);
1698
- __privateAdd$1(this, _getSchema);
1699
- __privateAdd$1(this, _schema, void 0);
1947
+ __privateAdd$1(this, _getSchemaTables);
1948
+ __privateAdd$1(this, _schemaTables, void 0);
1949
+ __privateSet$1(this, _schemaTables, schemaTables);
1700
1950
  }
1701
1951
  build({ getFetchProps }) {
1702
1952
  return {
1703
1953
  all: async (query, options = {}) => {
1704
1954
  const records = await __privateMethod$1(this, _search, search_fn).call(this, query, options, getFetchProps);
1705
- const schema = await __privateMethod$1(this, _getSchema, getSchema_fn).call(this, getFetchProps);
1955
+ const schemaTables = await __privateMethod$1(this, _getSchemaTables, getSchemaTables_fn).call(this, getFetchProps);
1706
1956
  return records.map((record) => {
1707
1957
  const { table = "orphan" } = record.xata;
1708
- return { table, record: initObject(this.db, schema, table, record) };
1958
+ return { table, record: initObject(this.db, schemaTables, table, record) };
1709
1959
  });
1710
1960
  },
1711
1961
  byTable: async (query, options = {}) => {
1712
1962
  const records = await __privateMethod$1(this, _search, search_fn).call(this, query, options, getFetchProps);
1713
- const schema = await __privateMethod$1(this, _getSchema, getSchema_fn).call(this, getFetchProps);
1963
+ const schemaTables = await __privateMethod$1(this, _getSchemaTables, getSchemaTables_fn).call(this, getFetchProps);
1714
1964
  return records.reduce((acc, record) => {
1715
1965
  const { table = "orphan" } = record.xata;
1716
1966
  const items = acc[table] ?? [];
1717
- const item = initObject(this.db, schema, table, record);
1967
+ const item = initObject(this.db, schemaTables, table, record);
1718
1968
  return { ...acc, [table]: [...items, item] };
1719
1969
  }, {});
1720
1970
  }
1721
1971
  };
1722
1972
  }
1723
1973
  }
1724
- _schema = new WeakMap();
1974
+ _schemaTables = new WeakMap();
1725
1975
  _search = new WeakSet();
1726
1976
  search_fn = async function(query, options, getFetchProps) {
1727
1977
  const fetchProps = await getFetchProps();
1728
- const { tables, fuzziness } = options ?? {};
1978
+ const { tables, fuzziness, highlight, prefix } = options ?? {};
1729
1979
  const { records } = await searchBranch({
1730
1980
  pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}" },
1731
- body: { tables, query, fuzziness },
1981
+ body: { tables, query, fuzziness, prefix, highlight },
1732
1982
  ...fetchProps
1733
1983
  });
1734
1984
  return records;
1735
1985
  };
1736
- _getSchema = new WeakSet();
1737
- getSchema_fn = async function(getFetchProps) {
1738
- if (__privateGet$1(this, _schema))
1739
- return __privateGet$1(this, _schema);
1986
+ _getSchemaTables = new WeakSet();
1987
+ getSchemaTables_fn = async function(getFetchProps) {
1988
+ if (__privateGet$1(this, _schemaTables))
1989
+ return __privateGet$1(this, _schemaTables);
1740
1990
  const fetchProps = await getFetchProps();
1741
1991
  const { schema } = await getBranchDetails({
1742
1992
  pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}" },
1743
1993
  ...fetchProps
1744
1994
  });
1745
- __privateSet$1(this, _schema, schema);
1746
- return schema;
1995
+ __privateSet$1(this, _schemaTables, schema.tables);
1996
+ return schema.tables;
1747
1997
  };
1748
1998
 
1749
1999
  const isBranchStrategyBuilder = (strategy) => {
1750
2000
  return typeof strategy === "function";
1751
2001
  };
1752
2002
 
1753
- const envBranchNames = [
1754
- "XATA_BRANCH",
1755
- "VERCEL_GIT_COMMIT_REF",
1756
- "CF_PAGES_BRANCH",
1757
- "BRANCH"
1758
- ];
1759
2003
  async function getCurrentBranchName(options) {
1760
- const env = getBranchByEnvVariable();
1761
- if (env) {
1762
- const details = await getDatabaseBranch(env, options);
2004
+ const { branch, envBranch } = getEnvironment();
2005
+ if (branch) {
2006
+ const details = await getDatabaseBranch(branch, options);
1763
2007
  if (details)
1764
- return env;
1765
- console.warn(`Branch ${env} not found in Xata. Ignoring...`);
2008
+ return branch;
2009
+ console.warn(`Branch ${branch} not found in Xata. Ignoring...`);
1766
2010
  }
1767
- const gitBranch = await getGitBranch();
2011
+ const gitBranch = envBranch || await getGitBranch();
1768
2012
  return resolveXataBranch(gitBranch, options);
1769
2013
  }
1770
2014
  async function getCurrentBranchDetails(options) {
@@ -1775,18 +2019,24 @@ async function resolveXataBranch(gitBranch, options) {
1775
2019
  const databaseURL = options?.databaseURL || getDatabaseURL();
1776
2020
  const apiKey = options?.apiKey || getAPIKey();
1777
2021
  if (!databaseURL)
1778
- throw new Error("A databaseURL was not defined. Either set the XATA_DATABASE_URL env variable or pass the argument explicitely");
2022
+ throw new Error(
2023
+ "A databaseURL was not defined. Either set the XATA_DATABASE_URL env variable or pass the argument explicitely"
2024
+ );
1779
2025
  if (!apiKey)
1780
- throw new Error("An API key was not defined. Either set the XATA_API_KEY env variable or pass the argument explicitely");
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
+ );
1781
2029
  const [protocol, , host, , dbName] = databaseURL.split("/");
1782
2030
  const [workspace] = host.split(".");
2031
+ const { fallbackBranch } = getEnvironment();
1783
2032
  const { branch } = await resolveBranch({
1784
2033
  apiKey,
1785
2034
  apiUrl: databaseURL,
1786
2035
  fetchImpl: getFetchImplementation(options?.fetchImpl),
1787
2036
  workspacesApiUrl: `${protocol}//${host}`,
1788
2037
  pathParams: { dbName, workspace },
1789
- queryParams: { gitBranch, fallbackBranch: getEnvVariable("XATA_FALLBACK_BRANCH") }
2038
+ queryParams: { gitBranch, fallbackBranch },
2039
+ trace: defaultTrace
1790
2040
  });
1791
2041
  return branch;
1792
2042
  }
@@ -1794,9 +2044,13 @@ async function getDatabaseBranch(branch, options) {
1794
2044
  const databaseURL = options?.databaseURL || getDatabaseURL();
1795
2045
  const apiKey = options?.apiKey || getAPIKey();
1796
2046
  if (!databaseURL)
1797
- 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
+ );
1798
2050
  if (!apiKey)
1799
- 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
+ );
1800
2054
  const [protocol, , host, , database] = databaseURL.split("/");
1801
2055
  const [workspace] = host.split(".");
1802
2056
  const dbBranchName = `${database}:${branch}`;
@@ -1806,10 +2060,8 @@ async function getDatabaseBranch(branch, options) {
1806
2060
  apiUrl: databaseURL,
1807
2061
  fetchImpl: getFetchImplementation(options?.fetchImpl),
1808
2062
  workspacesApiUrl: `${protocol}//${host}`,
1809
- pathParams: {
1810
- dbBranchName,
1811
- workspace
1812
- }
2063
+ pathParams: { dbBranchName, workspace },
2064
+ trace: defaultTrace
1813
2065
  });
1814
2066
  } catch (err) {
1815
2067
  if (isObject(err) && err.status === 404)
@@ -1817,21 +2069,10 @@ async function getDatabaseBranch(branch, options) {
1817
2069
  throw err;
1818
2070
  }
1819
2071
  }
1820
- function getBranchByEnvVariable() {
1821
- for (const name of envBranchNames) {
1822
- const value = getEnvVariable(name);
1823
- if (value) {
1824
- return value;
1825
- }
1826
- }
1827
- try {
1828
- return XATA_BRANCH;
1829
- } catch (err) {
1830
- }
1831
- }
1832
2072
  function getDatabaseURL() {
1833
2073
  try {
1834
- return getEnvVariable("XATA_DATABASE_URL") ?? XATA_DATABASE_URL;
2074
+ const { databaseURL } = getEnvironment();
2075
+ return databaseURL;
1835
2076
  } catch (err) {
1836
2077
  return void 0;
1837
2078
  }
@@ -1860,20 +2101,23 @@ var __privateMethod = (obj, member, method) => {
1860
2101
  return method;
1861
2102
  };
1862
2103
  const buildClient = (plugins) => {
1863
- 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;
1864
2105
  return _a = class {
1865
- constructor(options = {}, tables) {
2106
+ constructor(options = {}, schemaTables) {
1866
2107
  __privateAdd(this, _parseOptions);
1867
2108
  __privateAdd(this, _getFetchProps);
1868
2109
  __privateAdd(this, _evaluateBranch);
1869
2110
  __privateAdd(this, _branch, void 0);
2111
+ __privateAdd(this, _options, void 0);
1870
2112
  const safeOptions = __privateMethod(this, _parseOptions, parseOptions_fn).call(this, options);
2113
+ __privateSet(this, _options, safeOptions);
1871
2114
  const pluginOptions = {
1872
2115
  getFetchProps: () => __privateMethod(this, _getFetchProps, getFetchProps_fn).call(this, safeOptions),
1873
- cache: safeOptions.cache
2116
+ cache: safeOptions.cache,
2117
+ trace: safeOptions.trace
1874
2118
  };
1875
- const db = new SchemaPlugin(tables).build(pluginOptions);
1876
- const search = new SearchPlugin(db).build(pluginOptions);
2119
+ const db = new SchemaPlugin(schemaTables).build(pluginOptions);
2120
+ const search = new SearchPlugin(db, schemaTables).build(pluginOptions);
1877
2121
  this.db = db;
1878
2122
  this.search = search;
1879
2123
  for (const [key, namespace] of Object.entries(plugins ?? {})) {
@@ -1889,22 +2133,26 @@ const buildClient = (plugins) => {
1889
2133
  }
1890
2134
  }
1891
2135
  }
1892
- }, _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) {
1893
2142
  const fetch = getFetchImplementation(options?.fetch);
1894
2143
  const databaseURL = options?.databaseURL || getDatabaseURL();
1895
2144
  const apiKey = options?.apiKey || getAPIKey();
1896
- const cache = options?.cache ?? new SimpleCache({ cacheRecords: false, defaultQueryTTL: 0 });
2145
+ const cache = options?.cache ?? new SimpleCache({ defaultQueryTTL: 0 });
2146
+ const trace = options?.trace ?? defaultTrace;
1897
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 });
1898
- if (!databaseURL || !apiKey) {
1899
- throw new Error("Options databaseURL and apiKey are required");
2148
+ if (!apiKey) {
2149
+ throw new Error("Option apiKey is required");
1900
2150
  }
1901
- return { fetch, databaseURL, apiKey, branch, cache };
1902
- }, _getFetchProps = new WeakSet(), getFetchProps_fn = async function({
1903
- fetch,
1904
- apiKey,
1905
- databaseURL,
1906
- branch
1907
- }) {
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 }) {
1908
2156
  const branchValue = await __privateMethod(this, _evaluateBranch, evaluateBranch_fn).call(this, branch);
1909
2157
  if (!branchValue)
1910
2158
  throw new Error("Unable to resolve branch value");
@@ -1916,7 +2164,8 @@ const buildClient = (plugins) => {
1916
2164
  const hasBranch = params.dbBranchName ?? params.branch;
1917
2165
  const newPath = path.replace(/^\/db\/[^/]+/, hasBranch ? `:${branchValue}` : "");
1918
2166
  return databaseURL + newPath;
1919
- }
2167
+ },
2168
+ trace
1920
2169
  };
1921
2170
  }, _evaluateBranch = new WeakSet(), evaluateBranch_fn = async function(param) {
1922
2171
  if (__privateGet(this, _branch))
@@ -1939,6 +2188,88 @@ const buildClient = (plugins) => {
1939
2188
  class BaseClient extends buildClient() {
1940
2189
  }
1941
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
+
1942
2273
  class XataError extends Error {
1943
2274
  constructor(message, status) {
1944
2275
  super(message);
@@ -1954,10 +2285,12 @@ exports.PAGINATION_MAX_OFFSET = PAGINATION_MAX_OFFSET;
1954
2285
  exports.PAGINATION_MAX_SIZE = PAGINATION_MAX_SIZE;
1955
2286
  exports.Page = Page;
1956
2287
  exports.Query = Query;
2288
+ exports.RecordArray = RecordArray;
1957
2289
  exports.Repository = Repository;
1958
2290
  exports.RestRepository = RestRepository;
1959
2291
  exports.SchemaPlugin = SchemaPlugin;
1960
2292
  exports.SearchPlugin = SearchPlugin;
2293
+ exports.Serializer = Serializer;
1961
2294
  exports.SimpleCache = SimpleCache;
1962
2295
  exports.XataApiClient = XataApiClient;
1963
2296
  exports.XataApiPlugin = XataApiPlugin;
@@ -1967,6 +2300,7 @@ exports.acceptWorkspaceMemberInvite = acceptWorkspaceMemberInvite;
1967
2300
  exports.addGitBranchesEntry = addGitBranchesEntry;
1968
2301
  exports.addTableColumn = addTableColumn;
1969
2302
  exports.buildClient = buildClient;
2303
+ exports.buildWorkerRunner = buildWorkerRunner;
1970
2304
  exports.bulkInsertTableRecords = bulkInsertTableRecords;
1971
2305
  exports.cancelWorkspaceMemberInvite = cancelWorkspaceMemberInvite;
1972
2306
  exports.contains = contains;
@@ -1983,7 +2317,9 @@ exports.deleteTable = deleteTable;
1983
2317
  exports.deleteUser = deleteUser;
1984
2318
  exports.deleteUserAPIKey = deleteUserAPIKey;
1985
2319
  exports.deleteWorkspace = deleteWorkspace;
2320
+ exports.deserialize = deserialize;
1986
2321
  exports.endsWith = endsWith;
2322
+ exports.equals = equals;
1987
2323
  exports.executeBranchMigrationPlan = executeBranchMigrationPlan;
1988
2324
  exports.exists = exists;
1989
2325
  exports.ge = ge;
@@ -1998,6 +2334,7 @@ exports.getColumn = getColumn;
1998
2334
  exports.getCurrentBranchDetails = getCurrentBranchDetails;
1999
2335
  exports.getCurrentBranchName = getCurrentBranchName;
2000
2336
  exports.getDatabaseList = getDatabaseList;
2337
+ exports.getDatabaseMetadata = getDatabaseMetadata;
2001
2338
  exports.getDatabaseURL = getDatabaseURL;
2002
2339
  exports.getGitBranchesMapping = getGitBranchesMapping;
2003
2340
  exports.getRecord = getRecord;
@@ -2008,6 +2345,9 @@ exports.getUserAPIKeys = getUserAPIKeys;
2008
2345
  exports.getWorkspace = getWorkspace;
2009
2346
  exports.getWorkspaceMembersList = getWorkspaceMembersList;
2010
2347
  exports.getWorkspacesList = getWorkspacesList;
2348
+ exports.greaterEquals = greaterEquals;
2349
+ exports.greaterThan = greaterThan;
2350
+ exports.greaterThanEquals = greaterThanEquals;
2011
2351
  exports.gt = gt;
2012
2352
  exports.gte = gte;
2013
2353
  exports.includes = includes;
@@ -2023,6 +2363,9 @@ exports.isIdentifiable = isIdentifiable;
2023
2363
  exports.isNot = isNot;
2024
2364
  exports.isXataRecord = isXataRecord;
2025
2365
  exports.le = le;
2366
+ exports.lessEquals = lessEquals;
2367
+ exports.lessThan = lessThan;
2368
+ exports.lessThanEquals = lessThanEquals;
2026
2369
  exports.lt = lt;
2027
2370
  exports.lte = lte;
2028
2371
  exports.notExists = notExists;
@@ -2035,6 +2378,7 @@ exports.resendWorkspaceMemberInvite = resendWorkspaceMemberInvite;
2035
2378
  exports.resolveBranch = resolveBranch;
2036
2379
  exports.searchBranch = searchBranch;
2037
2380
  exports.searchTable = searchTable;
2381
+ exports.serialize = serialize;
2038
2382
  exports.setTableSchema = setTableSchema;
2039
2383
  exports.startsWith = startsWith;
2040
2384
  exports.updateBranchMetadata = updateBranchMetadata;
@@ -2043,6 +2387,7 @@ exports.updateRecordWithID = updateRecordWithID;
2043
2387
  exports.updateTable = updateTable;
2044
2388
  exports.updateUser = updateUser;
2045
2389
  exports.updateWorkspace = updateWorkspace;
2390
+ exports.updateWorkspaceMemberInvite = updateWorkspaceMemberInvite;
2046
2391
  exports.updateWorkspaceMemberRole = updateWorkspaceMemberRole;
2047
2392
  exports.upsertRecordWithID = upsertRecordWithID;
2048
2393
  //# sourceMappingURL=index.cjs.map