@xata.io/client 0.0.0-alpha.vf3081bb → 0.0.0-alpha.vf3111df

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,26 +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
 
177
+ const VERSION = "0.0.0-alpha.vf3111df";
178
+
80
179
  class ErrorWithCause extends Error {
81
180
  constructor(message, options) {
82
181
  super(message, options);
83
182
  }
84
183
  }
85
184
  class FetcherError extends ErrorWithCause {
86
- constructor(status, data) {
185
+ constructor(status, data, requestId) {
87
186
  super(getMessage(data));
88
187
  this.status = status;
89
188
  this.errors = isBulkError(data) ? data.errors : void 0;
189
+ this.requestId = requestId;
90
190
  if (data instanceof Error) {
91
191
  this.stack = data.stack;
92
192
  this.cause = data.cause;
93
193
  }
94
194
  }
195
+ toString() {
196
+ const error = super.toString();
197
+ return `[${this.status}] (${this.requestId ?? "Unknown"}): ${error}`;
198
+ }
95
199
  }
96
200
  function isBulkError(error) {
97
201
  return isObject(error) && Array.isArray(error.errors);
@@ -114,7 +218,12 @@ function getMessage(data) {
114
218
  }
115
219
 
116
220
  const resolveUrl = (url, queryParams = {}, pathParams = {}) => {
117
- 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();
118
227
  const queryString = query.length > 0 ? `?${query}` : "";
119
228
  return url.replace(/\{\w*\}/g, (key) => pathParams[key.slice(1, -1)]) + queryString;
120
229
  };
@@ -144,32 +253,62 @@ async function fetch$1({
144
253
  fetchImpl,
145
254
  apiKey,
146
255
  apiUrl,
147
- workspacesApiUrl
256
+ workspacesApiUrl,
257
+ trace
148
258
  }) {
149
- const baseUrl = buildBaseUrl({ path, workspacesApiUrl, pathParams, apiUrl });
150
- const fullUrl = resolveUrl(baseUrl, queryParams, pathParams);
151
- const url = fullUrl.includes("localhost") ? fullUrl.replace(/^[^.]+\./, "http://") : fullUrl;
152
- const response = await fetchImpl(url, {
153
- method: method.toUpperCase(),
154
- body: body ? JSON.stringify(body) : void 0,
155
- headers: {
156
- "Content-Type": "application/json",
157
- ...headers,
158
- ...hostHeader(fullUrl),
159
- Authorization: `Bearer ${apiKey}`
160
- }
161
- });
162
- if (response.status === 204) {
163
- return {};
164
- }
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) {
165
307
  try {
166
- const jsonResponse = await response.json();
167
- if (response.ok) {
168
- return jsonResponse;
169
- }
170
- throw new FetcherError(response.status, jsonResponse);
308
+ const { host, protocol } = new URL(url);
309
+ return { host, protocol };
171
310
  } catch (error) {
172
- throw new FetcherError(response.status, error);
311
+ return {};
173
312
  }
174
313
  }
175
314
 
@@ -228,6 +367,7 @@ const removeWorkspaceMember = (variables) => fetch$1({
228
367
  ...variables
229
368
  });
230
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 });
231
371
  const cancelWorkspaceMemberInvite = (variables) => fetch$1({
232
372
  url: "/workspaces/{workspaceId}/invites/{inviteId}",
233
373
  method: "delete",
@@ -263,6 +403,11 @@ const deleteDatabase = (variables) => fetch$1({
263
403
  method: "delete",
264
404
  ...variables
265
405
  });
406
+ const getDatabaseMetadata = (variables) => fetch$1({
407
+ url: "/dbs/{dbName}/metadata",
408
+ method: "get",
409
+ ...variables
410
+ });
266
411
  const getGitBranchesMapping = (variables) => fetch$1({ url: "/dbs/{dbName}/gitBranches", method: "get", ...variables });
267
412
  const addGitBranchesEntry = (variables) => fetch$1({ url: "/dbs/{dbName}/gitBranches", method: "post", ...variables });
268
413
  const removeGitBranchesEntry = (variables) => fetch$1({ url: "/dbs/{dbName}/gitBranches", method: "delete", ...variables });
@@ -276,11 +421,7 @@ const getBranchDetails = (variables) => fetch$1({
276
421
  method: "get",
277
422
  ...variables
278
423
  });
279
- const createBranch = (variables) => fetch$1({
280
- url: "/db/{dbBranchName}",
281
- method: "put",
282
- ...variables
283
- });
424
+ const createBranch = (variables) => fetch$1({ url: "/db/{dbBranchName}", method: "put", ...variables });
284
425
  const deleteBranch = (variables) => fetch$1({
285
426
  url: "/db/{dbBranchName}",
286
427
  method: "delete",
@@ -354,11 +495,7 @@ const updateColumn = (variables) => fetch$1({
354
495
  method: "patch",
355
496
  ...variables
356
497
  });
357
- const insertRecord = (variables) => fetch$1({
358
- url: "/db/{dbBranchName}/tables/{tableName}/data",
359
- method: "post",
360
- ...variables
361
- });
498
+ const insertRecord = (variables) => fetch$1({ url: "/db/{dbBranchName}/tables/{tableName}/data", method: "post", ...variables });
362
499
  const insertRecordWithID = (variables) => fetch$1({ url: "/db/{dbBranchName}/tables/{tableName}/data/{recordId}", method: "put", ...variables });
363
500
  const updateRecordWithID = (variables) => fetch$1({ url: "/db/{dbBranchName}/tables/{tableName}/data/{recordId}", method: "patch", ...variables });
364
501
  const upsertRecordWithID = (variables) => fetch$1({ url: "/db/{dbBranchName}/tables/{tableName}/data/{recordId}", method: "post", ...variables });
@@ -400,6 +537,7 @@ const operationsByTag = {
400
537
  updateWorkspaceMemberRole,
401
538
  removeWorkspaceMember,
402
539
  inviteWorkspaceMember,
540
+ updateWorkspaceMemberInvite,
403
541
  cancelWorkspaceMemberInvite,
404
542
  resendWorkspaceMemberInvite,
405
543
  acceptWorkspaceMemberInvite
@@ -408,6 +546,7 @@ const operationsByTag = {
408
546
  getDatabaseList,
409
547
  createDatabase,
410
548
  deleteDatabase,
549
+ getDatabaseMetadata,
411
550
  getGitBranchesMapping,
412
551
  addGitBranchesEntry,
413
552
  removeGitBranchesEntry,
@@ -489,7 +628,7 @@ var __privateAdd$7 = (obj, member, value) => {
489
628
  throw TypeError("Cannot add the same private member more than once");
490
629
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
491
630
  };
492
- var __privateSet$6 = (obj, member, value, setter) => {
631
+ var __privateSet$7 = (obj, member, value, setter) => {
493
632
  __accessCheck$7(obj, member, "write to private field");
494
633
  setter ? setter.call(obj, value) : member.set(obj, value);
495
634
  return value;
@@ -500,15 +639,17 @@ class XataApiClient {
500
639
  __privateAdd$7(this, _extraProps, void 0);
501
640
  __privateAdd$7(this, _namespaces, {});
502
641
  const provider = options.host ?? "production";
503
- const apiKey = options?.apiKey ?? getAPIKey();
642
+ const apiKey = options.apiKey ?? getAPIKey();
643
+ const trace = options.trace ?? defaultTrace;
504
644
  if (!apiKey) {
505
645
  throw new Error("Could not resolve a valid apiKey");
506
646
  }
507
- __privateSet$6(this, _extraProps, {
647
+ __privateSet$7(this, _extraProps, {
508
648
  apiUrl: getHostUrl(provider, "main"),
509
649
  workspacesApiUrl: getHostUrl(provider, "workspaces"),
510
650
  fetchImpl: getFetchImplementation(options.fetch),
511
- apiKey
651
+ apiKey,
652
+ trace
512
653
  });
513
654
  }
514
655
  get user() {
@@ -631,6 +772,13 @@ class WorkspaceApi {
631
772
  ...this.extraProps
632
773
  });
633
774
  }
775
+ updateWorkspaceMemberInvite(workspaceId, inviteId, role) {
776
+ return operationsByTag.workspaces.updateWorkspaceMemberInvite({
777
+ pathParams: { workspaceId, inviteId },
778
+ body: { role },
779
+ ...this.extraProps
780
+ });
781
+ }
634
782
  cancelWorkspaceMemberInvite(workspaceId, inviteId) {
635
783
  return operationsByTag.workspaces.cancelWorkspaceMemberInvite({
636
784
  pathParams: { workspaceId, inviteId },
@@ -673,6 +821,12 @@ class DatabaseApi {
673
821
  ...this.extraProps
674
822
  });
675
823
  }
824
+ getDatabaseMetadata(workspace, dbName) {
825
+ return operationsByTag.database.getDatabaseMetadata({
826
+ pathParams: { workspace, dbName },
827
+ ...this.extraProps
828
+ });
829
+ }
676
830
  getGitBranchesMapping(workspace, dbName) {
677
831
  return operationsByTag.database.getGitBranchesMapping({
678
832
  pathParams: { workspace, dbName },
@@ -693,10 +847,10 @@ class DatabaseApi {
693
847
  ...this.extraProps
694
848
  });
695
849
  }
696
- resolveBranch(workspace, dbName, gitBranch) {
850
+ resolveBranch(workspace, dbName, gitBranch, fallbackBranch) {
697
851
  return operationsByTag.database.resolveBranch({
698
852
  pathParams: { workspace, dbName },
699
- queryParams: { gitBranch },
853
+ queryParams: { gitBranch, fallbackBranch },
700
854
  ...this.extraProps
701
855
  });
702
856
  }
@@ -845,9 +999,10 @@ class RecordsApi {
845
999
  constructor(extraProps) {
846
1000
  this.extraProps = extraProps;
847
1001
  }
848
- insertRecord(workspace, database, branch, tableName, record) {
1002
+ insertRecord(workspace, database, branch, tableName, record, options = {}) {
849
1003
  return operationsByTag.records.insertRecord({
850
1004
  pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },
1005
+ queryParams: options,
851
1006
  body: record,
852
1007
  ...this.extraProps
853
1008
  });
@@ -876,21 +1031,24 @@ class RecordsApi {
876
1031
  ...this.extraProps
877
1032
  });
878
1033
  }
879
- deleteRecord(workspace, database, branch, tableName, recordId) {
1034
+ deleteRecord(workspace, database, branch, tableName, recordId, options = {}) {
880
1035
  return operationsByTag.records.deleteRecord({
881
1036
  pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, recordId },
1037
+ queryParams: options,
882
1038
  ...this.extraProps
883
1039
  });
884
1040
  }
885
1041
  getRecord(workspace, database, branch, tableName, recordId, options = {}) {
886
1042
  return operationsByTag.records.getRecord({
887
1043
  pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, recordId },
1044
+ queryParams: options,
888
1045
  ...this.extraProps
889
1046
  });
890
1047
  }
891
- bulkInsertTableRecords(workspace, database, branch, tableName, records) {
1048
+ bulkInsertTableRecords(workspace, database, branch, tableName, records, options = {}) {
892
1049
  return operationsByTag.records.bulkInsertTableRecords({
893
1050
  pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },
1051
+ queryParams: options,
894
1052
  body: { records },
895
1053
  ...this.extraProps
896
1054
  });
@@ -941,7 +1099,7 @@ var __privateAdd$6 = (obj, member, value) => {
941
1099
  throw TypeError("Cannot add the same private member more than once");
942
1100
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
943
1101
  };
944
- var __privateSet$5 = (obj, member, value, setter) => {
1102
+ var __privateSet$6 = (obj, member, value, setter) => {
945
1103
  __accessCheck$6(obj, member, "write to private field");
946
1104
  setter ? setter.call(obj, value) : member.set(obj, value);
947
1105
  return value;
@@ -950,7 +1108,7 @@ var _query, _page;
950
1108
  class Page {
951
1109
  constructor(query, meta, records = []) {
952
1110
  __privateAdd$6(this, _query, void 0);
953
- __privateSet$5(this, _query, query);
1111
+ __privateSet$6(this, _query, query);
954
1112
  this.meta = meta;
955
1113
  this.records = new RecordArray(this, records);
956
1114
  }
@@ -979,10 +1137,26 @@ function isCursorPaginationOptions(options) {
979
1137
  return isDefined(options) && (isDefined(options.first) || isDefined(options.last) || isDefined(options.after) || isDefined(options.before));
980
1138
  }
981
1139
  const _RecordArray = class extends Array {
982
- constructor(page, overrideRecords) {
983
- super(...overrideRecords ?? page.records);
1140
+ constructor(...args) {
1141
+ super(..._RecordArray.parseConstructorParams(...args));
984
1142
  __privateAdd$6(this, _page, void 0);
985
- __privateSet$5(this, _page, page);
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);
986
1160
  }
987
1161
  async nextPage(size, offset) {
988
1162
  const newPage = await __privateGet$6(this, _page).nextPage(size, offset);
@@ -1020,7 +1194,7 @@ var __privateAdd$5 = (obj, member, value) => {
1020
1194
  throw TypeError("Cannot add the same private member more than once");
1021
1195
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
1022
1196
  };
1023
- var __privateSet$4 = (obj, member, value, setter) => {
1197
+ var __privateSet$5 = (obj, member, value, setter) => {
1024
1198
  __accessCheck$5(obj, member, "write to private field");
1025
1199
  setter ? setter.call(obj, value) : member.set(obj, value);
1026
1200
  return value;
@@ -1033,11 +1207,11 @@ const _Query = class {
1033
1207
  __privateAdd$5(this, _data, { filter: {} });
1034
1208
  this.meta = { page: { cursor: "start", more: true } };
1035
1209
  this.records = new RecordArray(this, []);
1036
- __privateSet$4(this, _table$1, table);
1210
+ __privateSet$5(this, _table$1, table);
1037
1211
  if (repository) {
1038
- __privateSet$4(this, _repository, repository);
1212
+ __privateSet$5(this, _repository, repository);
1039
1213
  } else {
1040
- __privateSet$4(this, _repository, this);
1214
+ __privateSet$5(this, _repository, this);
1041
1215
  }
1042
1216
  const parent = cleanParent(data, rawParent);
1043
1217
  __privateGet$5(this, _data).filter = data.filter ?? parent?.filter ?? {};
@@ -1092,13 +1266,18 @@ const _Query = class {
1092
1266
  return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { filter: { $all } }, __privateGet$5(this, _data));
1093
1267
  }
1094
1268
  }
1095
- sort(column, direction) {
1269
+ sort(column, direction = "asc") {
1096
1270
  const originalSort = [__privateGet$5(this, _data).sort ?? []].flat();
1097
1271
  const sort = [...originalSort, { column, direction }];
1098
1272
  return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { sort }, __privateGet$5(this, _data));
1099
1273
  }
1100
1274
  select(columns) {
1101
- 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
+ );
1102
1281
  }
1103
1282
  getPaginated(options = {}) {
1104
1283
  const query = new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), options, __privateGet$5(this, _data));
@@ -1214,7 +1393,7 @@ var __privateAdd$4 = (obj, member, value) => {
1214
1393
  throw TypeError("Cannot add the same private member more than once");
1215
1394
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
1216
1395
  };
1217
- var __privateSet$3 = (obj, member, value, setter) => {
1396
+ var __privateSet$4 = (obj, member, value, setter) => {
1218
1397
  __accessCheck$4(obj, member, "write to private field");
1219
1398
  setter ? setter.call(obj, value) : member.set(obj, value);
1220
1399
  return value;
@@ -1223,7 +1402,7 @@ var __privateMethod$2 = (obj, member, method) => {
1223
1402
  __accessCheck$4(obj, member, "access private method");
1224
1403
  return method;
1225
1404
  };
1226
- 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;
1227
1406
  class Repository extends Query {
1228
1407
  }
1229
1408
  class RestRepository extends Query {
@@ -1235,188 +1414,214 @@ class RestRepository extends Query {
1235
1414
  __privateAdd$4(this, _updateRecordWithID);
1236
1415
  __privateAdd$4(this, _upsertRecordWithID);
1237
1416
  __privateAdd$4(this, _deleteRecord);
1238
- __privateAdd$4(this, _invalidateCache);
1239
- __privateAdd$4(this, _setCacheRecord);
1240
- __privateAdd$4(this, _getCacheRecord);
1241
1417
  __privateAdd$4(this, _setCacheQuery);
1242
1418
  __privateAdd$4(this, _getCacheQuery);
1243
- __privateAdd$4(this, _getSchema$1);
1419
+ __privateAdd$4(this, _getSchemaTables$1);
1244
1420
  __privateAdd$4(this, _table, void 0);
1245
1421
  __privateAdd$4(this, _getFetchProps, void 0);
1422
+ __privateAdd$4(this, _db, void 0);
1246
1423
  __privateAdd$4(this, _cache, void 0);
1247
- __privateAdd$4(this, _schema$1, void 0);
1248
- __privateSet$3(this, _table, options.table);
1249
- __privateSet$3(this, _getFetchProps, options.pluginOptions.getFetchProps);
1250
- this.db = options.db;
1251
- __privateSet$3(this, _cache, options.pluginOptions.cache);
1252
- }
1253
- async create(a, b) {
1254
- if (Array.isArray(a)) {
1255
- if (a.length === 0)
1256
- return [];
1257
- const records = await __privateMethod$2(this, _bulkInsertTableRecords, bulkInsertTableRecords_fn).call(this, a);
1258
- await Promise.all(records.map((record) => __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record)));
1259
- return records;
1260
- }
1261
- if (isString(a) && isObject(b)) {
1262
- if (a === "")
1263
- throw new Error("The id can't be empty");
1264
- const record = await __privateMethod$2(this, _insertRecordWithId, insertRecordWithId_fn).call(this, a, b);
1265
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1266
- return record;
1267
- }
1268
- if (isObject(a) && isString(a.id)) {
1269
- if (a.id === "")
1270
- throw new Error("The id can't be empty");
1271
- const record = await __privateMethod$2(this, _insertRecordWithId, insertRecordWithId_fn).call(this, a.id, { ...a, id: void 0 });
1272
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1273
- return record;
1274
- }
1275
- if (isObject(a)) {
1276
- const record = await __privateMethod$2(this, _insertRecordWithoutId, insertRecordWithoutId_fn).call(this, a);
1277
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1278
- return record;
1279
- }
1280
- throw new Error("Invalid arguments for create method");
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
1437
+ });
1438
+ });
1281
1439
  }
1282
- async read(a) {
1283
- if (Array.isArray(a)) {
1284
- if (a.length === 0)
1285
- return [];
1286
- return this.getAll({ filter: { id: { $any: a } } });
1287
- }
1288
- if (isString(a)) {
1289
- const cacheRecord = await __privateMethod$2(this, _getCacheRecord, getCacheRecord_fn).call(this, a);
1290
- if (cacheRecord)
1291
- return cacheRecord;
1292
- const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1293
- try {
1294
- const response = await getRecord({
1295
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table), recordId: a },
1296
- ...fetchProps
1297
- });
1298
- const schema = await __privateMethod$2(this, _getSchema$1, getSchema_fn$1).call(this);
1299
- return initObject(this.db, schema, __privateGet$4(this, _table), response);
1300
- } catch (e) {
1301
- if (isObject(e) && e.status === 404) {
1302
- return null;
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);
1447
+ }
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
+ });
1466
+ }
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);
1480
+ }
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;
1303
1502
  }
1304
- throw e;
1305
1503
  }
1306
- }
1504
+ return null;
1505
+ });
1307
1506
  }
1308
- async update(a, b) {
1309
- if (Array.isArray(a)) {
1310
- if (a.length === 0)
1311
- return [];
1312
- if (a.length > 100) {
1313
- 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)));
1314
1517
  }
1315
- return Promise.all(a.map((object) => this.update(object)));
1316
- }
1317
- if (isString(a) && isObject(b)) {
1318
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a);
1319
- const record = await __privateMethod$2(this, _updateRecordWithID, updateRecordWithID_fn).call(this, a, b);
1320
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1321
- return record;
1322
- }
1323
- if (isObject(a) && isString(a.id)) {
1324
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a.id);
1325
- const record = await __privateMethod$2(this, _updateRecordWithID, updateRecordWithID_fn).call(this, a.id, { ...a, id: void 0 });
1326
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1327
- return record;
1328
- }
1329
- throw new Error("Invalid arguments for update method");
1330
- }
1331
- async createOrUpdate(a, b) {
1332
- if (Array.isArray(a)) {
1333
- if (a.length === 0)
1334
- return [];
1335
- if (a.length > 100) {
1336
- console.warn("Bulk update operation is not optimized in the Xata API yet, this request might be slow");
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);
1337
1521
  }
1338
- return Promise.all(a.map((object) => this.createOrUpdate(object)));
1339
- }
1340
- if (isString(a) && isObject(b)) {
1341
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a);
1342
- const record = await __privateMethod$2(this, _upsertRecordWithID, upsertRecordWithID_fn).call(this, a, b);
1343
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1344
- return record;
1345
- }
1346
- if (isObject(a) && isString(a.id)) {
1347
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a.id);
1348
- const record = await __privateMethod$2(this, _upsertRecordWithID, upsertRecordWithID_fn).call(this, a.id, { ...a, id: void 0 });
1349
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1350
- return record;
1351
- }
1352
- throw new Error("Invalid arguments for createOrUpdate method");
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
+ });
1353
1550
  }
1354
1551
  async delete(a) {
1355
- if (Array.isArray(a)) {
1356
- if (a.length === 0)
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)));
1357
1560
  return;
1358
- if (a.length > 100) {
1359
- console.warn("Bulk delete operation is not optimized in the Xata API yet, this request might be slow");
1360
1561
  }
1361
- await Promise.all(a.map((id) => this.delete(id)));
1362
- return;
1363
- }
1364
- if (isString(a)) {
1365
- await __privateMethod$2(this, _deleteRecord, deleteRecord_fn).call(this, a);
1366
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a);
1367
- return;
1368
- }
1369
- if (isObject(a) && isString(a.id)) {
1370
- await __privateMethod$2(this, _deleteRecord, deleteRecord_fn).call(this, a.id);
1371
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a.id);
1372
- return;
1373
- }
1374
- 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
+ });
1375
1572
  }
1376
1573
  async search(query, options = {}) {
1377
- const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1378
- const { records } = await searchTable({
1379
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table) },
1380
- body: {
1381
- query,
1382
- fuzziness: options.fuzziness,
1383
- highlight: options.highlight,
1384
- filter: options.filter
1385
- },
1386
- ...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));
1387
1590
  });
1388
- const schema = await __privateMethod$2(this, _getSchema$1, getSchema_fn$1).call(this);
1389
- return records.map((item) => initObject(this.db, schema, __privateGet$4(this, _table), item));
1390
1591
  }
1391
1592
  async query(query) {
1392
- const cacheQuery = await __privateMethod$2(this, _getCacheQuery, getCacheQuery_fn).call(this, query);
1393
- if (cacheQuery)
1394
- return new Page(query, cacheQuery.meta, cacheQuery.records);
1395
- const data = query.getQueryOptions();
1396
- const body = {
1397
- filter: Object.values(data.filter ?? {}).some(Boolean) ? data.filter : void 0,
1398
- sort: data.sort !== void 0 ? buildSortFilter(data.sort) : void 0,
1399
- page: data.pagination,
1400
- columns: data.columns
1401
- };
1402
- const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1403
- const { meta, records: objects } = await queryTable({
1404
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table) },
1405
- body,
1406
- ...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);
1407
1614
  });
1408
- const schema = await __privateMethod$2(this, _getSchema$1, getSchema_fn$1).call(this);
1409
- const records = objects.map((record) => initObject(this.db, schema, __privateGet$4(this, _table), record));
1410
- await __privateMethod$2(this, _setCacheQuery, setCacheQuery_fn).call(this, query, meta, records);
1411
- return new Page(query, meta, records);
1412
1615
  }
1413
1616
  }
1414
1617
  _table = new WeakMap();
1415
1618
  _getFetchProps = new WeakMap();
1619
+ _db = new WeakMap();
1416
1620
  _cache = new WeakMap();
1417
- _schema$1 = new WeakMap();
1621
+ _schemaTables$2 = new WeakMap();
1622
+ _trace = new WeakMap();
1418
1623
  _insertRecordWithoutId = new WeakSet();
1419
- insertRecordWithoutId_fn = async function(object) {
1624
+ insertRecordWithoutId_fn = async function(object, columns = ["*"]) {
1420
1625
  const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1421
1626
  const record = transformObjectLinks(object);
1422
1627
  const response = await insertRecord({
@@ -1425,17 +1630,15 @@ insertRecordWithoutId_fn = async function(object) {
1425
1630
  dbBranchName: "{dbBranch}",
1426
1631
  tableName: __privateGet$4(this, _table)
1427
1632
  },
1633
+ queryParams: { columns },
1428
1634
  body: record,
1429
1635
  ...fetchProps
1430
1636
  });
1431
- const finalObject = await this.read(response.id);
1432
- if (!finalObject) {
1433
- throw new Error("The server failed to save the record");
1434
- }
1435
- 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);
1436
1639
  };
1437
1640
  _insertRecordWithId = new WeakSet();
1438
- insertRecordWithId_fn = async function(recordId, object) {
1641
+ insertRecordWithId_fn = async function(recordId, object, columns = ["*"]) {
1439
1642
  const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1440
1643
  const record = transformObjectLinks(object);
1441
1644
  const response = await insertRecordWithID({
@@ -1446,56 +1649,52 @@ insertRecordWithId_fn = async function(recordId, object) {
1446
1649
  recordId
1447
1650
  },
1448
1651
  body: record,
1449
- queryParams: { createOnly: true },
1652
+ queryParams: { createOnly: true, columns },
1450
1653
  ...fetchProps
1451
1654
  });
1452
- const finalObject = await this.read(response.id);
1453
- if (!finalObject) {
1454
- throw new Error("The server failed to save the record");
1455
- }
1456
- 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);
1457
1657
  };
1458
1658
  _bulkInsertTableRecords = new WeakSet();
1459
- bulkInsertTableRecords_fn = async function(objects) {
1659
+ bulkInsertTableRecords_fn = async function(objects, columns = ["*"]) {
1460
1660
  const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1461
1661
  const records = objects.map((object) => transformObjectLinks(object));
1462
1662
  const response = await bulkInsertTableRecords({
1463
1663
  pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table) },
1664
+ queryParams: { columns },
1464
1665
  body: { records },
1465
1666
  ...fetchProps
1466
1667
  });
1467
- const finalObjects = await this.any(...response.recordIDs.map((id) => this.filter("id", id))).getAll();
1468
- if (finalObjects.length !== objects.length) {
1469
- 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");
1470
1670
  }
1471
- 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));
1472
1673
  };
1473
1674
  _updateRecordWithID = new WeakSet();
1474
- updateRecordWithID_fn = async function(recordId, object) {
1675
+ updateRecordWithID_fn = async function(recordId, object, columns = ["*"]) {
1475
1676
  const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1476
1677
  const record = transformObjectLinks(object);
1477
1678
  const response = await updateRecordWithID({
1478
1679
  pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table), recordId },
1680
+ queryParams: { columns },
1479
1681
  body: record,
1480
1682
  ...fetchProps
1481
1683
  });
1482
- const item = await this.read(response.id);
1483
- if (!item)
1484
- throw new Error("The server failed to save the record");
1485
- 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);
1486
1686
  };
1487
1687
  _upsertRecordWithID = new WeakSet();
1488
- upsertRecordWithID_fn = async function(recordId, object) {
1688
+ upsertRecordWithID_fn = async function(recordId, object, columns = ["*"]) {
1489
1689
  const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1490
1690
  const response = await upsertRecordWithID({
1491
1691
  pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table), recordId },
1692
+ queryParams: { columns },
1492
1693
  body: object,
1493
1694
  ...fetchProps
1494
1695
  });
1495
- const item = await this.read(response.id);
1496
- if (!item)
1497
- throw new Error("The server failed to save the record");
1498
- 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);
1499
1698
  };
1500
1699
  _deleteRecord = new WeakSet();
1501
1700
  deleteRecord_fn = async function(recordId) {
@@ -1505,29 +1704,6 @@ deleteRecord_fn = async function(recordId) {
1505
1704
  ...fetchProps
1506
1705
  });
1507
1706
  };
1508
- _invalidateCache = new WeakSet();
1509
- invalidateCache_fn = async function(recordId) {
1510
- await __privateGet$4(this, _cache).delete(`rec_${__privateGet$4(this, _table)}:${recordId}`);
1511
- const cacheItems = await __privateGet$4(this, _cache).getAll();
1512
- const queries = Object.entries(cacheItems).filter(([key]) => key.startsWith("query_"));
1513
- for (const [key, value] of queries) {
1514
- const ids = getIds(value);
1515
- if (ids.includes(recordId))
1516
- await __privateGet$4(this, _cache).delete(key);
1517
- }
1518
- };
1519
- _setCacheRecord = new WeakSet();
1520
- setCacheRecord_fn = async function(record) {
1521
- if (!__privateGet$4(this, _cache).cacheRecords)
1522
- return;
1523
- await __privateGet$4(this, _cache).set(`rec_${__privateGet$4(this, _table)}:${record.id}`, record);
1524
- };
1525
- _getCacheRecord = new WeakSet();
1526
- getCacheRecord_fn = async function(recordId) {
1527
- if (!__privateGet$4(this, _cache).cacheRecords)
1528
- return null;
1529
- return __privateGet$4(this, _cache).get(`rec_${__privateGet$4(this, _table)}:${recordId}`);
1530
- };
1531
1707
  _setCacheQuery = new WeakSet();
1532
1708
  setCacheQuery_fn = async function(query, meta, records) {
1533
1709
  await __privateGet$4(this, _cache).set(`query_${__privateGet$4(this, _table)}:${query.key()}`, { date: new Date(), meta, records });
@@ -1544,17 +1720,17 @@ getCacheQuery_fn = async function(query) {
1544
1720
  const hasExpired = result.date.getTime() + ttl < Date.now();
1545
1721
  return hasExpired ? null : result;
1546
1722
  };
1547
- _getSchema$1 = new WeakSet();
1548
- getSchema_fn$1 = async function() {
1549
- if (__privateGet$4(this, _schema$1))
1550
- 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);
1551
1727
  const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1552
1728
  const { schema } = await getBranchDetails({
1553
1729
  pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}" },
1554
1730
  ...fetchProps
1555
1731
  });
1556
- __privateSet$3(this, _schema$1, schema);
1557
- return schema;
1732
+ __privateSet$4(this, _schemaTables$2, schema.tables);
1733
+ return schema.tables;
1558
1734
  };
1559
1735
  const transformObjectLinks = (object) => {
1560
1736
  return Object.entries(object).reduce((acc, [key, value]) => {
@@ -1563,11 +1739,11 @@ const transformObjectLinks = (object) => {
1563
1739
  return { ...acc, [key]: isIdentifiable(value) ? value.id : value };
1564
1740
  }, {});
1565
1741
  };
1566
- const initObject = (db, schema, table, object) => {
1742
+ const initObject = (db, schemaTables, table, object) => {
1567
1743
  const result = {};
1568
1744
  const { xata, ...rest } = object ?? {};
1569
1745
  Object.assign(result, rest);
1570
- const { columns } = schema.tables.find(({ name }) => name === table) ?? {};
1746
+ const { columns } = schemaTables.find(({ name }) => name === table) ?? {};
1571
1747
  if (!columns)
1572
1748
  console.error(`Table ${table} not found in schema`);
1573
1749
  for (const column of columns ?? []) {
@@ -1587,17 +1763,17 @@ const initObject = (db, schema, table, object) => {
1587
1763
  if (!linkTable) {
1588
1764
  console.error(`Failed to parse link for field ${column.name}`);
1589
1765
  } else if (isObject(value)) {
1590
- result[column.name] = initObject(db, schema, linkTable, value);
1766
+ result[column.name] = initObject(db, schemaTables, linkTable, value);
1591
1767
  }
1592
1768
  break;
1593
1769
  }
1594
1770
  }
1595
1771
  }
1596
- result.read = function() {
1597
- return db[table].read(result["id"]);
1772
+ result.read = function(columns2) {
1773
+ return db[table].read(result["id"], columns2);
1598
1774
  };
1599
- result.update = function(data) {
1600
- return db[table].update(result["id"], data);
1775
+ result.update = function(data, columns2) {
1776
+ return db[table].update(result["id"], data, columns2);
1601
1777
  };
1602
1778
  result.delete = function() {
1603
1779
  return db[table].delete(result["id"]);
@@ -1611,14 +1787,8 @@ const initObject = (db, schema, table, object) => {
1611
1787
  Object.freeze(result);
1612
1788
  return result;
1613
1789
  };
1614
- function getIds(value) {
1615
- if (Array.isArray(value)) {
1616
- return value.map((item) => getIds(item)).flat();
1617
- }
1618
- if (!isObject(value))
1619
- return [];
1620
- const nestedIds = Object.values(value).map((item) => getIds(item)).flat();
1621
- return isString(value.id) ? [value.id, ...nestedIds] : nestedIds;
1790
+ function isResponseWithRecords(value) {
1791
+ return isObject(value) && Array.isArray(value.records);
1622
1792
  }
1623
1793
 
1624
1794
  var __accessCheck$3 = (obj, member, msg) => {
@@ -1634,7 +1804,7 @@ var __privateAdd$3 = (obj, member, value) => {
1634
1804
  throw TypeError("Cannot add the same private member more than once");
1635
1805
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
1636
1806
  };
1637
- var __privateSet$2 = (obj, member, value, setter) => {
1807
+ var __privateSet$3 = (obj, member, value, setter) => {
1638
1808
  __accessCheck$3(obj, member, "write to private field");
1639
1809
  setter ? setter.call(obj, value) : member.set(obj, value);
1640
1810
  return value;
@@ -1643,9 +1813,8 @@ var _map;
1643
1813
  class SimpleCache {
1644
1814
  constructor(options = {}) {
1645
1815
  __privateAdd$3(this, _map, void 0);
1646
- __privateSet$2(this, _map, /* @__PURE__ */ new Map());
1816
+ __privateSet$3(this, _map, /* @__PURE__ */ new Map());
1647
1817
  this.capacity = options.max ?? 500;
1648
- this.cacheRecords = options.cacheRecords ?? true;
1649
1818
  this.defaultQueryTTL = options.defaultQueryTTL ?? 60 * 1e3;
1650
1819
  }
1651
1820
  async getAll() {
@@ -1703,31 +1872,42 @@ var __privateAdd$2 = (obj, member, value) => {
1703
1872
  throw TypeError("Cannot add the same private member more than once");
1704
1873
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
1705
1874
  };
1706
- var _tables;
1875
+ var __privateSet$2 = (obj, member, value, setter) => {
1876
+ __accessCheck$2(obj, member, "write to private field");
1877
+ setter ? setter.call(obj, value) : member.set(obj, value);
1878
+ return value;
1879
+ };
1880
+ var _tables, _schemaTables$1;
1707
1881
  class SchemaPlugin extends XataPlugin {
1708
- constructor(tableNames) {
1882
+ constructor(schemaTables) {
1709
1883
  super();
1710
- this.tableNames = tableNames;
1711
1884
  __privateAdd$2(this, _tables, {});
1885
+ __privateAdd$2(this, _schemaTables$1, void 0);
1886
+ __privateSet$2(this, _schemaTables$1, schemaTables);
1712
1887
  }
1713
1888
  build(pluginOptions) {
1714
- const db = new Proxy({}, {
1715
- get: (_target, table) => {
1716
- if (!isString(table))
1717
- throw new Error("Invalid table name");
1718
- if (__privateGet$2(this, _tables)[table] === void 0) {
1719
- __privateGet$2(this, _tables)[table] = new RestRepository({ db, pluginOptions, table });
1889
+ const db = new Proxy(
1890
+ {},
1891
+ {
1892
+ get: (_target, table) => {
1893
+ if (!isString(table))
1894
+ throw new Error("Invalid table name");
1895
+ if (__privateGet$2(this, _tables)[table] === void 0) {
1896
+ __privateGet$2(this, _tables)[table] = new RestRepository({ db, pluginOptions, table, schemaTables: __privateGet$2(this, _schemaTables$1) });
1897
+ }
1898
+ return __privateGet$2(this, _tables)[table];
1720
1899
  }
1721
- return __privateGet$2(this, _tables)[table];
1722
1900
  }
1723
- });
1724
- for (const table of this.tableNames ?? []) {
1725
- db[table] = new RestRepository({ db, pluginOptions, table });
1901
+ );
1902
+ const tableNames = __privateGet$2(this, _schemaTables$1)?.map(({ name }) => name) ?? [];
1903
+ for (const table of tableNames) {
1904
+ db[table] = new RestRepository({ db, pluginOptions, table, schemaTables: __privateGet$2(this, _schemaTables$1) });
1726
1905
  }
1727
1906
  return db;
1728
1907
  }
1729
1908
  }
1730
1909
  _tables = new WeakMap();
1910
+ _schemaTables$1 = new WeakMap();
1731
1911
 
1732
1912
  var __accessCheck$1 = (obj, member, msg) => {
1733
1913
  if (!member.has(obj))
@@ -1751,82 +1931,77 @@ var __privateMethod$1 = (obj, member, method) => {
1751
1931
  __accessCheck$1(obj, member, "access private method");
1752
1932
  return method;
1753
1933
  };
1754
- var _schema, _search, search_fn, _getSchema, getSchema_fn;
1934
+ var _schemaTables, _search, search_fn, _getSchemaTables, getSchemaTables_fn;
1755
1935
  class SearchPlugin extends XataPlugin {
1756
- constructor(db) {
1936
+ constructor(db, schemaTables) {
1757
1937
  super();
1758
1938
  this.db = db;
1759
1939
  __privateAdd$1(this, _search);
1760
- __privateAdd$1(this, _getSchema);
1761
- __privateAdd$1(this, _schema, void 0);
1940
+ __privateAdd$1(this, _getSchemaTables);
1941
+ __privateAdd$1(this, _schemaTables, void 0);
1942
+ __privateSet$1(this, _schemaTables, schemaTables);
1762
1943
  }
1763
1944
  build({ getFetchProps }) {
1764
1945
  return {
1765
1946
  all: async (query, options = {}) => {
1766
1947
  const records = await __privateMethod$1(this, _search, search_fn).call(this, query, options, getFetchProps);
1767
- const schema = await __privateMethod$1(this, _getSchema, getSchema_fn).call(this, getFetchProps);
1948
+ const schemaTables = await __privateMethod$1(this, _getSchemaTables, getSchemaTables_fn).call(this, getFetchProps);
1768
1949
  return records.map((record) => {
1769
1950
  const { table = "orphan" } = record.xata;
1770
- return { table, record: initObject(this.db, schema, table, record) };
1951
+ return { table, record: initObject(this.db, schemaTables, table, record) };
1771
1952
  });
1772
1953
  },
1773
1954
  byTable: async (query, options = {}) => {
1774
1955
  const records = await __privateMethod$1(this, _search, search_fn).call(this, query, options, getFetchProps);
1775
- const schema = await __privateMethod$1(this, _getSchema, getSchema_fn).call(this, getFetchProps);
1956
+ const schemaTables = await __privateMethod$1(this, _getSchemaTables, getSchemaTables_fn).call(this, getFetchProps);
1776
1957
  return records.reduce((acc, record) => {
1777
1958
  const { table = "orphan" } = record.xata;
1778
1959
  const items = acc[table] ?? [];
1779
- const item = initObject(this.db, schema, table, record);
1960
+ const item = initObject(this.db, schemaTables, table, record);
1780
1961
  return { ...acc, [table]: [...items, item] };
1781
1962
  }, {});
1782
1963
  }
1783
1964
  };
1784
1965
  }
1785
1966
  }
1786
- _schema = new WeakMap();
1967
+ _schemaTables = new WeakMap();
1787
1968
  _search = new WeakSet();
1788
1969
  search_fn = async function(query, options, getFetchProps) {
1789
1970
  const fetchProps = await getFetchProps();
1790
- const { tables, fuzziness, highlight } = options ?? {};
1971
+ const { tables, fuzziness, highlight, prefix } = options ?? {};
1791
1972
  const { records } = await searchBranch({
1792
1973
  pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}" },
1793
- body: { tables, query, fuzziness, highlight },
1974
+ body: { tables, query, fuzziness, prefix, highlight },
1794
1975
  ...fetchProps
1795
1976
  });
1796
1977
  return records;
1797
1978
  };
1798
- _getSchema = new WeakSet();
1799
- getSchema_fn = async function(getFetchProps) {
1800
- if (__privateGet$1(this, _schema))
1801
- return __privateGet$1(this, _schema);
1979
+ _getSchemaTables = new WeakSet();
1980
+ getSchemaTables_fn = async function(getFetchProps) {
1981
+ if (__privateGet$1(this, _schemaTables))
1982
+ return __privateGet$1(this, _schemaTables);
1802
1983
  const fetchProps = await getFetchProps();
1803
1984
  const { schema } = await getBranchDetails({
1804
1985
  pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}" },
1805
1986
  ...fetchProps
1806
1987
  });
1807
- __privateSet$1(this, _schema, schema);
1808
- return schema;
1988
+ __privateSet$1(this, _schemaTables, schema.tables);
1989
+ return schema.tables;
1809
1990
  };
1810
1991
 
1811
1992
  const isBranchStrategyBuilder = (strategy) => {
1812
1993
  return typeof strategy === "function";
1813
1994
  };
1814
1995
 
1815
- const envBranchNames = [
1816
- "XATA_BRANCH",
1817
- "VERCEL_GIT_COMMIT_REF",
1818
- "CF_PAGES_BRANCH",
1819
- "BRANCH"
1820
- ];
1821
1996
  async function getCurrentBranchName(options) {
1822
- const env = getBranchByEnvVariable();
1823
- if (env) {
1824
- const details = await getDatabaseBranch(env, options);
1997
+ const { branch, envBranch } = getEnvironment();
1998
+ if (branch) {
1999
+ const details = await getDatabaseBranch(branch, options);
1825
2000
  if (details)
1826
- return env;
1827
- console.warn(`Branch ${env} not found in Xata. Ignoring...`);
2001
+ return branch;
2002
+ console.warn(`Branch ${branch} not found in Xata. Ignoring...`);
1828
2003
  }
1829
- const gitBranch = await getGitBranch();
2004
+ const gitBranch = envBranch || await getGitBranch();
1830
2005
  return resolveXataBranch(gitBranch, options);
1831
2006
  }
1832
2007
  async function getCurrentBranchDetails(options) {
@@ -1837,18 +2012,24 @@ async function resolveXataBranch(gitBranch, options) {
1837
2012
  const databaseURL = options?.databaseURL || getDatabaseURL();
1838
2013
  const apiKey = options?.apiKey || getAPIKey();
1839
2014
  if (!databaseURL)
1840
- throw new Error("A databaseURL was not defined. Either set the XATA_DATABASE_URL env variable or pass the argument explicitely");
2015
+ throw new Error(
2016
+ "A databaseURL was not defined. Either set the XATA_DATABASE_URL env variable or pass the argument explicitely"
2017
+ );
1841
2018
  if (!apiKey)
1842
- throw new Error("An API key was not defined. Either set the XATA_API_KEY env variable or pass the argument explicitely");
2019
+ throw new Error(
2020
+ "An API key was not defined. Either set the XATA_API_KEY env variable or pass the argument explicitely"
2021
+ );
1843
2022
  const [protocol, , host, , dbName] = databaseURL.split("/");
1844
2023
  const [workspace] = host.split(".");
2024
+ const { fallbackBranch } = getEnvironment();
1845
2025
  const { branch } = await resolveBranch({
1846
2026
  apiKey,
1847
2027
  apiUrl: databaseURL,
1848
2028
  fetchImpl: getFetchImplementation(options?.fetchImpl),
1849
2029
  workspacesApiUrl: `${protocol}//${host}`,
1850
2030
  pathParams: { dbName, workspace },
1851
- queryParams: { gitBranch, fallbackBranch: getEnvVariable("XATA_FALLBACK_BRANCH") }
2031
+ queryParams: { gitBranch, fallbackBranch },
2032
+ trace: defaultTrace
1852
2033
  });
1853
2034
  return branch;
1854
2035
  }
@@ -1856,9 +2037,13 @@ async function getDatabaseBranch(branch, options) {
1856
2037
  const databaseURL = options?.databaseURL || getDatabaseURL();
1857
2038
  const apiKey = options?.apiKey || getAPIKey();
1858
2039
  if (!databaseURL)
1859
- throw new Error("A databaseURL was not defined. Either set the XATA_DATABASE_URL env variable or pass the argument explicitely");
2040
+ throw new Error(
2041
+ "A databaseURL was not defined. Either set the XATA_DATABASE_URL env variable or pass the argument explicitely"
2042
+ );
1860
2043
  if (!apiKey)
1861
- throw new Error("An API key was not defined. Either set the XATA_API_KEY env variable or pass the argument explicitely");
2044
+ throw new Error(
2045
+ "An API key was not defined. Either set the XATA_API_KEY env variable or pass the argument explicitely"
2046
+ );
1862
2047
  const [protocol, , host, , database] = databaseURL.split("/");
1863
2048
  const [workspace] = host.split(".");
1864
2049
  const dbBranchName = `${database}:${branch}`;
@@ -1868,10 +2053,8 @@ async function getDatabaseBranch(branch, options) {
1868
2053
  apiUrl: databaseURL,
1869
2054
  fetchImpl: getFetchImplementation(options?.fetchImpl),
1870
2055
  workspacesApiUrl: `${protocol}//${host}`,
1871
- pathParams: {
1872
- dbBranchName,
1873
- workspace
1874
- }
2056
+ pathParams: { dbBranchName, workspace },
2057
+ trace: defaultTrace
1875
2058
  });
1876
2059
  } catch (err) {
1877
2060
  if (isObject(err) && err.status === 404)
@@ -1879,21 +2062,10 @@ async function getDatabaseBranch(branch, options) {
1879
2062
  throw err;
1880
2063
  }
1881
2064
  }
1882
- function getBranchByEnvVariable() {
1883
- for (const name of envBranchNames) {
1884
- const value = getEnvVariable(name);
1885
- if (value) {
1886
- return value;
1887
- }
1888
- }
1889
- try {
1890
- return XATA_BRANCH;
1891
- } catch (err) {
1892
- }
1893
- }
1894
2065
  function getDatabaseURL() {
1895
2066
  try {
1896
- return getEnvVariable("XATA_DATABASE_URL") ?? XATA_DATABASE_URL;
2067
+ const { databaseURL } = getEnvironment();
2068
+ return databaseURL;
1897
2069
  } catch (err) {
1898
2070
  return void 0;
1899
2071
  }
@@ -1922,20 +2094,23 @@ var __privateMethod = (obj, member, method) => {
1922
2094
  return method;
1923
2095
  };
1924
2096
  const buildClient = (plugins) => {
1925
- var _branch, _parseOptions, parseOptions_fn, _getFetchProps, getFetchProps_fn, _evaluateBranch, evaluateBranch_fn, _a;
2097
+ var _branch, _options, _parseOptions, parseOptions_fn, _getFetchProps, getFetchProps_fn, _evaluateBranch, evaluateBranch_fn, _a;
1926
2098
  return _a = class {
1927
- constructor(options = {}, tables) {
2099
+ constructor(options = {}, schemaTables) {
1928
2100
  __privateAdd(this, _parseOptions);
1929
2101
  __privateAdd(this, _getFetchProps);
1930
2102
  __privateAdd(this, _evaluateBranch);
1931
2103
  __privateAdd(this, _branch, void 0);
2104
+ __privateAdd(this, _options, void 0);
1932
2105
  const safeOptions = __privateMethod(this, _parseOptions, parseOptions_fn).call(this, options);
2106
+ __privateSet(this, _options, safeOptions);
1933
2107
  const pluginOptions = {
1934
2108
  getFetchProps: () => __privateMethod(this, _getFetchProps, getFetchProps_fn).call(this, safeOptions),
1935
- cache: safeOptions.cache
2109
+ cache: safeOptions.cache,
2110
+ trace: safeOptions.trace
1936
2111
  };
1937
- const db = new SchemaPlugin(tables).build(pluginOptions);
1938
- const search = new SearchPlugin(db).build(pluginOptions);
2112
+ const db = new SchemaPlugin(schemaTables).build(pluginOptions);
2113
+ const search = new SearchPlugin(db, schemaTables).build(pluginOptions);
1939
2114
  this.db = db;
1940
2115
  this.search = search;
1941
2116
  for (const [key, namespace] of Object.entries(plugins ?? {})) {
@@ -1951,22 +2126,23 @@ const buildClient = (plugins) => {
1951
2126
  }
1952
2127
  }
1953
2128
  }
1954
- }, _branch = new WeakMap(), _parseOptions = new WeakSet(), parseOptions_fn = function(options) {
2129
+ async getConfig() {
2130
+ const databaseURL = __privateGet(this, _options).databaseURL;
2131
+ const branch = await __privateGet(this, _options).branch();
2132
+ return { databaseURL, branch };
2133
+ }
2134
+ }, _branch = new WeakMap(), _options = new WeakMap(), _parseOptions = new WeakSet(), parseOptions_fn = function(options) {
1955
2135
  const fetch = getFetchImplementation(options?.fetch);
1956
2136
  const databaseURL = options?.databaseURL || getDatabaseURL();
1957
2137
  const apiKey = options?.apiKey || getAPIKey();
1958
- const cache = options?.cache ?? new SimpleCache({ cacheRecords: false, defaultQueryTTL: 0 });
2138
+ const cache = options?.cache ?? new SimpleCache({ defaultQueryTTL: 0 });
2139
+ const trace = options?.trace ?? defaultTrace;
1959
2140
  const branch = async () => options?.branch !== void 0 ? await __privateMethod(this, _evaluateBranch, evaluateBranch_fn).call(this, options.branch) : await getCurrentBranchName({ apiKey, databaseURL, fetchImpl: options?.fetch });
1960
2141
  if (!databaseURL || !apiKey) {
1961
2142
  throw new Error("Options databaseURL and apiKey are required");
1962
2143
  }
1963
- return { fetch, databaseURL, apiKey, branch, cache };
1964
- }, _getFetchProps = new WeakSet(), getFetchProps_fn = async function({
1965
- fetch,
1966
- apiKey,
1967
- databaseURL,
1968
- branch
1969
- }) {
2144
+ return { fetch, databaseURL, apiKey, branch, cache, trace };
2145
+ }, _getFetchProps = new WeakSet(), getFetchProps_fn = async function({ fetch, apiKey, databaseURL, branch, trace }) {
1970
2146
  const branchValue = await __privateMethod(this, _evaluateBranch, evaluateBranch_fn).call(this, branch);
1971
2147
  if (!branchValue)
1972
2148
  throw new Error("Unable to resolve branch value");
@@ -1978,7 +2154,8 @@ const buildClient = (plugins) => {
1978
2154
  const hasBranch = params.dbBranchName ?? params.branch;
1979
2155
  const newPath = path.replace(/^\/db\/[^/]+/, hasBranch ? `:${branchValue}` : "");
1980
2156
  return databaseURL + newPath;
1981
- }
2157
+ },
2158
+ trace
1982
2159
  };
1983
2160
  }, _evaluateBranch = new WeakSet(), evaluateBranch_fn = async function(param) {
1984
2161
  if (__privateGet(this, _branch))
@@ -2001,6 +2178,88 @@ const buildClient = (plugins) => {
2001
2178
  class BaseClient extends buildClient() {
2002
2179
  }
2003
2180
 
2181
+ const META = "__";
2182
+ const VALUE = "___";
2183
+ class Serializer {
2184
+ constructor() {
2185
+ this.classes = {};
2186
+ }
2187
+ add(clazz) {
2188
+ this.classes[clazz.name] = clazz;
2189
+ }
2190
+ toJSON(data) {
2191
+ function visit(obj) {
2192
+ if (Array.isArray(obj))
2193
+ return obj.map(visit);
2194
+ const type = typeof obj;
2195
+ if (type === "undefined")
2196
+ return { [META]: "undefined" };
2197
+ if (type === "bigint")
2198
+ return { [META]: "bigint", [VALUE]: obj.toString() };
2199
+ if (obj === null || type !== "object")
2200
+ return obj;
2201
+ const constructor = obj.constructor;
2202
+ const o = { [META]: constructor.name };
2203
+ for (const [key, value] of Object.entries(obj)) {
2204
+ o[key] = visit(value);
2205
+ }
2206
+ if (constructor === Date)
2207
+ o[VALUE] = obj.toISOString();
2208
+ if (constructor === Map)
2209
+ o[VALUE] = Object.fromEntries(obj);
2210
+ if (constructor === Set)
2211
+ o[VALUE] = [...obj];
2212
+ return o;
2213
+ }
2214
+ return JSON.stringify(visit(data));
2215
+ }
2216
+ fromJSON(json) {
2217
+ return JSON.parse(json, (key, value) => {
2218
+ if (value && typeof value === "object" && !Array.isArray(value)) {
2219
+ const { [META]: clazz, [VALUE]: val, ...rest } = value;
2220
+ const constructor = this.classes[clazz];
2221
+ if (constructor) {
2222
+ return Object.assign(Object.create(constructor.prototype), rest);
2223
+ }
2224
+ if (clazz === "Date")
2225
+ return new Date(val);
2226
+ if (clazz === "Set")
2227
+ return new Set(val);
2228
+ if (clazz === "Map")
2229
+ return new Map(Object.entries(val));
2230
+ if (clazz === "bigint")
2231
+ return BigInt(val);
2232
+ if (clazz === "undefined")
2233
+ return void 0;
2234
+ return rest;
2235
+ }
2236
+ return value;
2237
+ });
2238
+ }
2239
+ }
2240
+ const defaultSerializer = new Serializer();
2241
+ const serialize = (data) => {
2242
+ return defaultSerializer.toJSON(data);
2243
+ };
2244
+ const deserialize = (json) => {
2245
+ return defaultSerializer.fromJSON(json);
2246
+ };
2247
+
2248
+ function buildWorkerRunner(config) {
2249
+ return function xataWorker(name, _worker) {
2250
+ return async (...args) => {
2251
+ const url = process.env.NODE_ENV === "development" ? `http://localhost:64749/${name}` : `https://dispatcher.xata.workers.dev/${config.workspace}/${config.worker}/${name}`;
2252
+ const result = await fetch(url, {
2253
+ method: "POST",
2254
+ headers: { "Content-Type": "application/json" },
2255
+ body: serialize({ args })
2256
+ });
2257
+ const text = await result.text();
2258
+ return deserialize(text);
2259
+ };
2260
+ };
2261
+ }
2262
+
2004
2263
  class XataError extends Error {
2005
2264
  constructor(message, status) {
2006
2265
  super(message);
@@ -2021,6 +2280,7 @@ exports.Repository = Repository;
2021
2280
  exports.RestRepository = RestRepository;
2022
2281
  exports.SchemaPlugin = SchemaPlugin;
2023
2282
  exports.SearchPlugin = SearchPlugin;
2283
+ exports.Serializer = Serializer;
2024
2284
  exports.SimpleCache = SimpleCache;
2025
2285
  exports.XataApiClient = XataApiClient;
2026
2286
  exports.XataApiPlugin = XataApiPlugin;
@@ -2030,6 +2290,7 @@ exports.acceptWorkspaceMemberInvite = acceptWorkspaceMemberInvite;
2030
2290
  exports.addGitBranchesEntry = addGitBranchesEntry;
2031
2291
  exports.addTableColumn = addTableColumn;
2032
2292
  exports.buildClient = buildClient;
2293
+ exports.buildWorkerRunner = buildWorkerRunner;
2033
2294
  exports.bulkInsertTableRecords = bulkInsertTableRecords;
2034
2295
  exports.cancelWorkspaceMemberInvite = cancelWorkspaceMemberInvite;
2035
2296
  exports.contains = contains;
@@ -2046,6 +2307,7 @@ exports.deleteTable = deleteTable;
2046
2307
  exports.deleteUser = deleteUser;
2047
2308
  exports.deleteUserAPIKey = deleteUserAPIKey;
2048
2309
  exports.deleteWorkspace = deleteWorkspace;
2310
+ exports.deserialize = deserialize;
2049
2311
  exports.endsWith = endsWith;
2050
2312
  exports.executeBranchMigrationPlan = executeBranchMigrationPlan;
2051
2313
  exports.exists = exists;
@@ -2061,6 +2323,7 @@ exports.getColumn = getColumn;
2061
2323
  exports.getCurrentBranchDetails = getCurrentBranchDetails;
2062
2324
  exports.getCurrentBranchName = getCurrentBranchName;
2063
2325
  exports.getDatabaseList = getDatabaseList;
2326
+ exports.getDatabaseMetadata = getDatabaseMetadata;
2064
2327
  exports.getDatabaseURL = getDatabaseURL;
2065
2328
  exports.getGitBranchesMapping = getGitBranchesMapping;
2066
2329
  exports.getRecord = getRecord;
@@ -2098,6 +2361,7 @@ exports.resendWorkspaceMemberInvite = resendWorkspaceMemberInvite;
2098
2361
  exports.resolveBranch = resolveBranch;
2099
2362
  exports.searchBranch = searchBranch;
2100
2363
  exports.searchTable = searchTable;
2364
+ exports.serialize = serialize;
2101
2365
  exports.setTableSchema = setTableSchema;
2102
2366
  exports.startsWith = startsWith;
2103
2367
  exports.updateBranchMetadata = updateBranchMetadata;
@@ -2106,6 +2370,7 @@ exports.updateRecordWithID = updateRecordWithID;
2106
2370
  exports.updateTable = updateTable;
2107
2371
  exports.updateUser = updateUser;
2108
2372
  exports.updateWorkspace = updateWorkspace;
2373
+ exports.updateWorkspaceMemberInvite = updateWorkspaceMemberInvite;
2109
2374
  exports.updateWorkspaceMemberRole = updateWorkspaceMemberRole;
2110
2375
  exports.upsertRecordWithID = upsertRecordWithID;
2111
2376
  //# sourceMappingURL=index.cjs.map