@xata.io/client 0.0.0-alpha.vecada6d → 0.0.0-alpha.ved155c7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -2,6 +2,46 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
+ function _interopNamespace(e) {
6
+ if (e && e.__esModule) return e;
7
+ var n = Object.create(null);
8
+ if (e) {
9
+ Object.keys(e).forEach(function (k) {
10
+ if (k !== 'default') {
11
+ var d = Object.getOwnPropertyDescriptor(e, k);
12
+ Object.defineProperty(n, k, d.get ? d : {
13
+ enumerable: true,
14
+ get: function () { return e[k]; }
15
+ });
16
+ }
17
+ });
18
+ }
19
+ n["default"] = e;
20
+ return Object.freeze(n);
21
+ }
22
+
23
+ const defaultTrace = async (_name, fn, _options) => {
24
+ return await fn({
25
+ setAttributes: () => {
26
+ return;
27
+ }
28
+ });
29
+ };
30
+ const TraceAttributes = {
31
+ KIND: "xata.trace.kind",
32
+ VERSION: "xata.sdk.version",
33
+ TABLE: "xata.table",
34
+ HTTP_REQUEST_ID: "http.request_id",
35
+ HTTP_STATUS_CODE: "http.status_code",
36
+ HTTP_HOST: "http.host",
37
+ HTTP_SCHEME: "http.scheme",
38
+ HTTP_USER_AGENT: "http.user_agent",
39
+ HTTP_METHOD: "http.method",
40
+ HTTP_URL: "http.url",
41
+ HTTP_ROUTE: "http.route",
42
+ HTTP_TARGET: "http.target"
43
+ };
44
+
5
45
  function notEmpty(value) {
6
46
  return value !== null && value !== void 0;
7
47
  }
@@ -11,46 +51,101 @@ function compact(arr) {
11
51
  function isObject(value) {
12
52
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
13
53
  }
54
+ function isDefined(value) {
55
+ return value !== null && value !== void 0;
56
+ }
14
57
  function isString(value) {
15
- return value !== void 0 && value !== null && typeof value === "string";
58
+ return isDefined(value) && typeof value === "string";
59
+ }
60
+ function isStringArray(value) {
61
+ return isDefined(value) && Array.isArray(value) && value.every(isString);
16
62
  }
17
63
  function toBase64(value) {
18
64
  try {
19
65
  return btoa(value);
20
66
  } catch (err) {
21
- return Buffer.from(value).toString("base64");
67
+ const buf = Buffer;
68
+ return buf.from(value).toString("base64");
22
69
  }
23
70
  }
24
71
 
25
- function getEnvVariable(name) {
72
+ function getEnvironment() {
26
73
  try {
27
- if (isObject(process) && isString(process?.env?.[name])) {
28
- return process.env[name];
74
+ if (isObject(process) && isObject(process.env)) {
75
+ return {
76
+ apiKey: process.env.XATA_API_KEY ?? getGlobalApiKey(),
77
+ databaseURL: process.env.XATA_DATABASE_URL ?? getGlobalDatabaseURL(),
78
+ branch: process.env.XATA_BRANCH ?? getGlobalBranch(),
79
+ envBranch: process.env.VERCEL_GIT_COMMIT_REF ?? process.env.CF_PAGES_BRANCH ?? process.env.BRANCH,
80
+ fallbackBranch: process.env.XATA_FALLBACK_BRANCH ?? getGlobalFallbackBranch()
81
+ };
29
82
  }
30
83
  } catch (err) {
31
84
  }
32
85
  try {
33
- if (isObject(Deno) && isString(Deno?.env?.get(name))) {
34
- return Deno.env.get(name);
86
+ if (isObject(Deno) && isObject(Deno.env)) {
87
+ return {
88
+ apiKey: Deno.env.get("XATA_API_KEY") ?? getGlobalApiKey(),
89
+ databaseURL: Deno.env.get("XATA_DATABASE_URL") ?? getGlobalDatabaseURL(),
90
+ branch: Deno.env.get("XATA_BRANCH") ?? getGlobalBranch(),
91
+ envBranch: Deno.env.get("VERCEL_GIT_COMMIT_REF") ?? Deno.env.get("CF_PAGES_BRANCH") ?? Deno.env.get("BRANCH"),
92
+ fallbackBranch: Deno.env.get("XATA_FALLBACK_BRANCH") ?? getGlobalFallbackBranch()
93
+ };
35
94
  }
36
95
  } catch (err) {
37
96
  }
97
+ return {
98
+ apiKey: getGlobalApiKey(),
99
+ databaseURL: getGlobalDatabaseURL(),
100
+ branch: getGlobalBranch(),
101
+ envBranch: void 0,
102
+ fallbackBranch: getGlobalFallbackBranch()
103
+ };
104
+ }
105
+ function getGlobalApiKey() {
106
+ try {
107
+ return XATA_API_KEY;
108
+ } catch (err) {
109
+ return void 0;
110
+ }
111
+ }
112
+ function getGlobalDatabaseURL() {
113
+ try {
114
+ return XATA_DATABASE_URL;
115
+ } catch (err) {
116
+ return void 0;
117
+ }
118
+ }
119
+ function getGlobalBranch() {
120
+ try {
121
+ return XATA_BRANCH;
122
+ } catch (err) {
123
+ return void 0;
124
+ }
125
+ }
126
+ function getGlobalFallbackBranch() {
127
+ try {
128
+ return XATA_FALLBACK_BRANCH;
129
+ } catch (err) {
130
+ return void 0;
131
+ }
38
132
  }
39
133
  async function getGitBranch() {
134
+ const cmd = ["git", "branch", "--show-current"];
135
+ const fullCmd = cmd.join(" ");
136
+ const nodeModule = ["child", "process"].join("_");
137
+ const execOptions = { encoding: "utf-8", stdio: ["ignore", "pipe", "ignore"] };
40
138
  try {
41
139
  if (typeof require === "function") {
42
- const req = require;
43
- return req("child_process").execSync("git branch --show-current", { encoding: "utf-8" }).trim();
140
+ return require(nodeModule).execSync(fullCmd, execOptions).trim();
44
141
  }
142
+ const { execSync } = await (function (t) { return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require(t)); }); })(nodeModule);
143
+ return execSync(fullCmd, execOptions).toString().trim();
45
144
  } catch (err) {
46
145
  }
47
146
  try {
48
147
  if (isObject(Deno)) {
49
- const process2 = Deno.run({
50
- cmd: ["git", "branch", "--show-current"],
51
- stdout: "piped",
52
- stderr: "piped"
53
- });
148
+ const process2 = Deno.run({ cmd, stdout: "piped", stderr: "null" });
54
149
  return new TextDecoder().decode(await process2.output()).trim();
55
150
  }
56
151
  } catch (err) {
@@ -59,7 +154,8 @@ async function getGitBranch() {
59
154
 
60
155
  function getAPIKey() {
61
156
  try {
62
- return getEnvVariable("XATA_API_KEY") ?? XATA_API_KEY;
157
+ const { apiKey } = getEnvironment();
158
+ return apiKey;
63
159
  } catch (err) {
64
160
  return void 0;
65
161
  }
@@ -69,21 +165,35 @@ function getFetchImplementation(userFetch) {
69
165
  const globalFetch = typeof fetch !== "undefined" ? fetch : void 0;
70
166
  const fetchImpl = userFetch ?? globalFetch;
71
167
  if (!fetchImpl) {
72
- throw new Error(`The \`fetch\` option passed to the Xata client is resolving to a falsy value and may not be correctly imported.`);
168
+ throw new Error(
169
+ `Couldn't find \`fetch\`. Install a fetch implementation such as \`node-fetch\` and pass it explicitly.`
170
+ );
73
171
  }
74
172
  return fetchImpl;
75
173
  }
76
174
 
77
- class FetcherError extends Error {
78
- constructor(status, data) {
175
+ const VERSION = "0.0.0-alpha.ved155c7";
176
+
177
+ class ErrorWithCause extends Error {
178
+ constructor(message, options) {
179
+ super(message, options);
180
+ }
181
+ }
182
+ class FetcherError extends ErrorWithCause {
183
+ constructor(status, data, requestId) {
79
184
  super(getMessage(data));
80
185
  this.status = status;
81
186
  this.errors = isBulkError(data) ? data.errors : void 0;
187
+ this.requestId = requestId;
82
188
  if (data instanceof Error) {
83
189
  this.stack = data.stack;
84
190
  this.cause = data.cause;
85
191
  }
86
192
  }
193
+ toString() {
194
+ const error = super.toString();
195
+ return `[${this.status}] (${this.requestId ?? "Unknown"}): ${error}`;
196
+ }
87
197
  }
88
198
  function isBulkError(error) {
89
199
  return isObject(error) && Array.isArray(error.errors);
@@ -106,9 +216,17 @@ function getMessage(data) {
106
216
  }
107
217
 
108
218
  const resolveUrl = (url, queryParams = {}, pathParams = {}) => {
109
- const query = new URLSearchParams(queryParams).toString();
219
+ const cleanQueryParams = Object.entries(queryParams).reduce((acc, [key, value]) => {
220
+ if (value === void 0 || value === null)
221
+ return acc;
222
+ return { ...acc, [key]: value };
223
+ }, {});
224
+ const query = new URLSearchParams(cleanQueryParams).toString();
110
225
  const queryString = query.length > 0 ? `?${query}` : "";
111
- return url.replace(/\{\w*\}/g, (key) => pathParams[key.slice(1, -1)]) + queryString;
226
+ const cleanPathParams = Object.entries(pathParams).reduce((acc, [key, value]) => {
227
+ return { ...acc, [key]: encodeURIComponent(String(value ?? "")).replace("%3A", ":") };
228
+ }, {});
229
+ return url.replace(/\{\w*\}/g, (key) => cleanPathParams[key.slice(1, -1)]) + queryString;
112
230
  };
113
231
  function buildBaseUrl({
114
232
  path,
@@ -116,10 +234,10 @@ function buildBaseUrl({
116
234
  apiUrl,
117
235
  pathParams
118
236
  }) {
119
- if (!pathParams?.workspace)
237
+ if (pathParams?.workspace === void 0)
120
238
  return `${apiUrl}${path}`;
121
239
  const url = typeof workspacesApiUrl === "string" ? `${workspacesApiUrl}${path}` : workspacesApiUrl(path, pathParams);
122
- return url.replace("{workspaceId}", pathParams.workspace);
240
+ return url.replace("{workspaceId}", String(pathParams.workspace));
123
241
  }
124
242
  function hostHeader(url) {
125
243
  const pattern = /.*:\/\/(?<host>[^/]+).*/;
@@ -136,32 +254,61 @@ async function fetch$1({
136
254
  fetchImpl,
137
255
  apiKey,
138
256
  apiUrl,
139
- workspacesApiUrl
257
+ workspacesApiUrl,
258
+ trace
140
259
  }) {
141
- const baseUrl = buildBaseUrl({ path, workspacesApiUrl, pathParams, apiUrl });
142
- const fullUrl = resolveUrl(baseUrl, queryParams, pathParams);
143
- const url = fullUrl.includes("localhost") ? fullUrl.replace(/^[^.]+\./, "http://") : fullUrl;
144
- const response = await fetchImpl(url, {
145
- method: method.toUpperCase(),
146
- body: body ? JSON.stringify(body) : void 0,
147
- headers: {
148
- "Content-Type": "application/json",
149
- ...headers,
150
- ...hostHeader(fullUrl),
151
- Authorization: `Bearer ${apiKey}`
152
- }
153
- });
154
- if (response.status === 204) {
155
- return {};
156
- }
260
+ return trace(
261
+ `${method.toUpperCase()} ${path}`,
262
+ async ({ setAttributes }) => {
263
+ const baseUrl = buildBaseUrl({ path, workspacesApiUrl, pathParams, apiUrl });
264
+ const fullUrl = resolveUrl(baseUrl, queryParams, pathParams);
265
+ const url = fullUrl.includes("localhost") ? fullUrl.replace(/^[^.]+\./, "http://") : fullUrl;
266
+ setAttributes({
267
+ [TraceAttributes.HTTP_URL]: url,
268
+ [TraceAttributes.HTTP_TARGET]: resolveUrl(path, queryParams, pathParams)
269
+ });
270
+ const response = await fetchImpl(url, {
271
+ method: method.toUpperCase(),
272
+ body: body ? JSON.stringify(body) : void 0,
273
+ headers: {
274
+ "Content-Type": "application/json",
275
+ "User-Agent": `Xata client-ts/${VERSION}`,
276
+ ...headers,
277
+ ...hostHeader(fullUrl),
278
+ Authorization: `Bearer ${apiKey}`
279
+ }
280
+ });
281
+ if (response.status === 204) {
282
+ return {};
283
+ }
284
+ const { host, protocol } = parseUrl(response.url);
285
+ const requestId = response.headers?.get("x-request-id") ?? void 0;
286
+ setAttributes({
287
+ [TraceAttributes.KIND]: "http",
288
+ [TraceAttributes.HTTP_REQUEST_ID]: requestId,
289
+ [TraceAttributes.HTTP_STATUS_CODE]: response.status,
290
+ [TraceAttributes.HTTP_HOST]: host,
291
+ [TraceAttributes.HTTP_SCHEME]: protocol?.replace(":", "")
292
+ });
293
+ try {
294
+ const jsonResponse = await response.json();
295
+ if (response.ok) {
296
+ return jsonResponse;
297
+ }
298
+ throw new FetcherError(response.status, jsonResponse, requestId);
299
+ } catch (error) {
300
+ throw new FetcherError(response.status, error, requestId);
301
+ }
302
+ },
303
+ { [TraceAttributes.HTTP_METHOD]: method.toUpperCase(), [TraceAttributes.HTTP_ROUTE]: path }
304
+ );
305
+ }
306
+ function parseUrl(url) {
157
307
  try {
158
- const jsonResponse = await response.json();
159
- if (response.ok) {
160
- return jsonResponse;
161
- }
162
- throw new FetcherError(response.status, jsonResponse);
308
+ const { host, protocol } = new URL(url);
309
+ return { host, protocol };
163
310
  } catch (error) {
164
- throw new FetcherError(response.status, error);
311
+ return {};
165
312
  }
166
313
  }
167
314
 
@@ -220,6 +367,7 @@ const removeWorkspaceMember = (variables) => fetch$1({
220
367
  ...variables
221
368
  });
222
369
  const inviteWorkspaceMember = (variables) => fetch$1({ url: "/workspaces/{workspaceId}/invites", method: "post", ...variables });
370
+ const updateWorkspaceMemberInvite = (variables) => fetch$1({ url: "/workspaces/{workspaceId}/invites/{inviteId}", method: "patch", ...variables });
223
371
  const cancelWorkspaceMemberInvite = (variables) => fetch$1({
224
372
  url: "/workspaces/{workspaceId}/invites/{inviteId}",
225
373
  method: "delete",
@@ -255,6 +403,12 @@ const deleteDatabase = (variables) => fetch$1({
255
403
  method: "delete",
256
404
  ...variables
257
405
  });
406
+ const getDatabaseMetadata = (variables) => fetch$1({
407
+ url: "/dbs/{dbName}/metadata",
408
+ method: "get",
409
+ ...variables
410
+ });
411
+ const patchDatabaseMetadata = (variables) => fetch$1({ url: "/dbs/{dbName}/metadata", method: "patch", ...variables });
258
412
  const getGitBranchesMapping = (variables) => fetch$1({ url: "/dbs/{dbName}/gitBranches", method: "get", ...variables });
259
413
  const addGitBranchesEntry = (variables) => fetch$1({ url: "/dbs/{dbName}/gitBranches", method: "post", ...variables });
260
414
  const removeGitBranchesEntry = (variables) => fetch$1({ url: "/dbs/{dbName}/gitBranches", method: "delete", ...variables });
@@ -263,16 +417,28 @@ const resolveBranch = (variables) => fetch$1({
263
417
  method: "get",
264
418
  ...variables
265
419
  });
266
- const getBranchDetails = (variables) => fetch$1({
267
- url: "/db/{dbBranchName}",
420
+ const listMigrationRequests = (variables) => fetch$1({ url: "/dbs/{dbName}/migrations/list", method: "post", ...variables });
421
+ const createMigrationRequest = (variables) => fetch$1({ url: "/dbs/{dbName}/migrations", method: "post", ...variables });
422
+ const getMigrationRequest = (variables) => fetch$1({
423
+ url: "/dbs/{dbName}/migrations/{mrNumber}",
268
424
  method: "get",
269
425
  ...variables
270
426
  });
271
- const createBranch = (variables) => fetch$1({
427
+ const updateMigrationRequest = (variables) => fetch$1({ url: "/dbs/{dbName}/migrations/{mrNumber}", method: "patch", ...variables });
428
+ const listMigrationRequestsCommits = (variables) => fetch$1({ url: "/dbs/{dbName}/migrations/{mrNumber}/commits", method: "post", ...variables });
429
+ const compareMigrationRequest = (variables) => fetch$1({ url: "/dbs/{dbName}/migrations/{mrNumber}/compare", method: "post", ...variables });
430
+ const getMigrationRequestIsMerged = (variables) => fetch$1({ url: "/dbs/{dbName}/migrations/{mrNumber}/merge", method: "get", ...variables });
431
+ const mergeMigrationRequest = (variables) => fetch$1({
432
+ url: "/dbs/{dbName}/migrations/{mrNumber}/merge",
433
+ method: "post",
434
+ ...variables
435
+ });
436
+ const getBranchDetails = (variables) => fetch$1({
272
437
  url: "/db/{dbBranchName}",
273
- method: "put",
438
+ method: "get",
274
439
  ...variables
275
440
  });
441
+ const createBranch = (variables) => fetch$1({ url: "/db/{dbBranchName}", method: "put", ...variables });
276
442
  const deleteBranch = (variables) => fetch$1({
277
443
  url: "/db/{dbBranchName}",
278
444
  method: "delete",
@@ -291,6 +457,16 @@ const getBranchMetadata = (variables) => fetch$1({
291
457
  const getBranchMigrationHistory = (variables) => fetch$1({ url: "/db/{dbBranchName}/migrations", method: "get", ...variables });
292
458
  const executeBranchMigrationPlan = (variables) => fetch$1({ url: "/db/{dbBranchName}/migrations/execute", method: "post", ...variables });
293
459
  const getBranchMigrationPlan = (variables) => fetch$1({ url: "/db/{dbBranchName}/migrations/plan", method: "post", ...variables });
460
+ const compareBranchWithUserSchema = (variables) => fetch$1({ url: "/db/{dbBranchName}/schema/compare", method: "post", ...variables });
461
+ const compareBranchSchemas = (variables) => fetch$1({ url: "/db/{dbBranchName}/schema/compare/{branchName}", method: "post", ...variables });
462
+ const updateBranchSchema = (variables) => fetch$1({
463
+ url: "/db/{dbBranchName}/schema/update",
464
+ method: "post",
465
+ ...variables
466
+ });
467
+ const previewBranchSchemaEdit = (variables) => fetch$1({ url: "/db/{dbBranchName}/schema/preview", method: "post", ...variables });
468
+ const applyBranchSchemaEdit = (variables) => fetch$1({ url: "/db/{dbBranchName}/schema/apply", method: "post", ...variables });
469
+ const getBranchSchemaHistory = (variables) => fetch$1({ url: "/db/{dbBranchName}/schema/history", method: "post", ...variables });
294
470
  const getBranchStats = (variables) => fetch$1({
295
471
  url: "/db/{dbBranchName}/stats",
296
472
  method: "get",
@@ -346,11 +522,7 @@ const updateColumn = (variables) => fetch$1({
346
522
  method: "patch",
347
523
  ...variables
348
524
  });
349
- const insertRecord = (variables) => fetch$1({
350
- url: "/db/{dbBranchName}/tables/{tableName}/data",
351
- method: "post",
352
- ...variables
353
- });
525
+ const insertRecord = (variables) => fetch$1({ url: "/db/{dbBranchName}/tables/{tableName}/data", method: "post", ...variables });
354
526
  const insertRecordWithID = (variables) => fetch$1({ url: "/db/{dbBranchName}/tables/{tableName}/data/{recordId}", method: "put", ...variables });
355
527
  const updateRecordWithID = (variables) => fetch$1({ url: "/db/{dbBranchName}/tables/{tableName}/data/{recordId}", method: "patch", ...variables });
356
528
  const upsertRecordWithID = (variables) => fetch$1({ url: "/db/{dbBranchName}/tables/{tableName}/data/{recordId}", method: "post", ...variables });
@@ -392,6 +564,7 @@ const operationsByTag = {
392
564
  updateWorkspaceMemberRole,
393
565
  removeWorkspaceMember,
394
566
  inviteWorkspaceMember,
567
+ updateWorkspaceMemberInvite,
395
568
  cancelWorkspaceMemberInvite,
396
569
  resendWorkspaceMemberInvite,
397
570
  acceptWorkspaceMemberInvite
@@ -400,6 +573,8 @@ const operationsByTag = {
400
573
  getDatabaseList,
401
574
  createDatabase,
402
575
  deleteDatabase,
576
+ getDatabaseMetadata,
577
+ patchDatabaseMetadata,
403
578
  getGitBranchesMapping,
404
579
  addGitBranchesEntry,
405
580
  removeGitBranchesEntry,
@@ -412,10 +587,28 @@ const operationsByTag = {
412
587
  deleteBranch,
413
588
  updateBranchMetadata,
414
589
  getBranchMetadata,
590
+ getBranchStats
591
+ },
592
+ migrationRequests: {
593
+ listMigrationRequests,
594
+ createMigrationRequest,
595
+ getMigrationRequest,
596
+ updateMigrationRequest,
597
+ listMigrationRequestsCommits,
598
+ compareMigrationRequest,
599
+ getMigrationRequestIsMerged,
600
+ mergeMigrationRequest
601
+ },
602
+ branchSchema: {
415
603
  getBranchMigrationHistory,
416
604
  executeBranchMigrationPlan,
417
605
  getBranchMigrationPlan,
418
- getBranchStats
606
+ compareBranchWithUserSchema,
607
+ compareBranchSchemas,
608
+ updateBranchSchema,
609
+ previewBranchSchemaEdit,
610
+ applyBranchSchemaEdit,
611
+ getBranchSchemaHistory
419
612
  },
420
613
  table: {
421
614
  createTable,
@@ -444,9 +637,9 @@ const operationsByTag = {
444
637
  };
445
638
 
446
639
  function getHostUrl(provider, type) {
447
- if (isValidAlias(provider)) {
640
+ if (isHostProviderAlias(provider)) {
448
641
  return providers[provider][type];
449
- } else if (isValidBuilder(provider)) {
642
+ } else if (isHostProviderBuilder(provider)) {
450
643
  return provider[type];
451
644
  }
452
645
  throw new Error("Invalid API provider");
@@ -461,10 +654,10 @@ const providers = {
461
654
  workspaces: "https://{workspaceId}.staging.xatabase.co"
462
655
  }
463
656
  };
464
- function isValidAlias(alias) {
657
+ function isHostProviderAlias(alias) {
465
658
  return isString(alias) && Object.keys(providers).includes(alias);
466
659
  }
467
- function isValidBuilder(builder) {
660
+ function isHostProviderBuilder(builder) {
468
661
  return isObject(builder) && isString(builder.main) && isString(builder.workspaces);
469
662
  }
470
663
 
@@ -481,7 +674,7 @@ var __privateAdd$7 = (obj, member, value) => {
481
674
  throw TypeError("Cannot add the same private member more than once");
482
675
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
483
676
  };
484
- var __privateSet$6 = (obj, member, value, setter) => {
677
+ var __privateSet$7 = (obj, member, value, setter) => {
485
678
  __accessCheck$7(obj, member, "write to private field");
486
679
  setter ? setter.call(obj, value) : member.set(obj, value);
487
680
  return value;
@@ -492,15 +685,17 @@ class XataApiClient {
492
685
  __privateAdd$7(this, _extraProps, void 0);
493
686
  __privateAdd$7(this, _namespaces, {});
494
687
  const provider = options.host ?? "production";
495
- const apiKey = options?.apiKey ?? getAPIKey();
688
+ const apiKey = options.apiKey ?? getAPIKey();
689
+ const trace = options.trace ?? defaultTrace;
496
690
  if (!apiKey) {
497
691
  throw new Error("Could not resolve a valid apiKey");
498
692
  }
499
- __privateSet$6(this, _extraProps, {
693
+ __privateSet$7(this, _extraProps, {
500
694
  apiUrl: getHostUrl(provider, "main"),
501
695
  workspacesApiUrl: getHostUrl(provider, "workspaces"),
502
696
  fetchImpl: getFetchImplementation(options.fetch),
503
- apiKey
697
+ apiKey,
698
+ trace
504
699
  });
505
700
  }
506
701
  get user() {
@@ -533,6 +728,16 @@ class XataApiClient {
533
728
  __privateGet$7(this, _namespaces).records = new RecordsApi(__privateGet$7(this, _extraProps));
534
729
  return __privateGet$7(this, _namespaces).records;
535
730
  }
731
+ get migrationRequests() {
732
+ if (!__privateGet$7(this, _namespaces).migrationRequests)
733
+ __privateGet$7(this, _namespaces).migrationRequests = new MigrationRequestsApi(__privateGet$7(this, _extraProps));
734
+ return __privateGet$7(this, _namespaces).migrationRequests;
735
+ }
736
+ get branchSchema() {
737
+ if (!__privateGet$7(this, _namespaces).branchSchema)
738
+ __privateGet$7(this, _namespaces).branchSchema = new BranchSchemaApi(__privateGet$7(this, _extraProps));
739
+ return __privateGet$7(this, _namespaces).branchSchema;
740
+ }
536
741
  }
537
742
  _extraProps = new WeakMap();
538
743
  _namespaces = new WeakMap();
@@ -623,6 +828,13 @@ class WorkspaceApi {
623
828
  ...this.extraProps
624
829
  });
625
830
  }
831
+ updateWorkspaceMemberInvite(workspaceId, inviteId, role) {
832
+ return operationsByTag.workspaces.updateWorkspaceMemberInvite({
833
+ pathParams: { workspaceId, inviteId },
834
+ body: { role },
835
+ ...this.extraProps
836
+ });
837
+ }
626
838
  cancelWorkspaceMemberInvite(workspaceId, inviteId) {
627
839
  return operationsByTag.workspaces.cancelWorkspaceMemberInvite({
628
840
  pathParams: { workspaceId, inviteId },
@@ -665,6 +877,19 @@ class DatabaseApi {
665
877
  ...this.extraProps
666
878
  });
667
879
  }
880
+ getDatabaseMetadata(workspace, dbName) {
881
+ return operationsByTag.database.getDatabaseMetadata({
882
+ pathParams: { workspace, dbName },
883
+ ...this.extraProps
884
+ });
885
+ }
886
+ patchDatabaseMetadata(workspace, dbName, options = {}) {
887
+ return operationsByTag.database.patchDatabaseMetadata({
888
+ pathParams: { workspace, dbName },
889
+ body: options,
890
+ ...this.extraProps
891
+ });
892
+ }
668
893
  getGitBranchesMapping(workspace, dbName) {
669
894
  return operationsByTag.database.getGitBranchesMapping({
670
895
  pathParams: { workspace, dbName },
@@ -685,10 +910,10 @@ class DatabaseApi {
685
910
  ...this.extraProps
686
911
  });
687
912
  }
688
- resolveBranch(workspace, dbName, gitBranch) {
913
+ resolveBranch(workspace, dbName, gitBranch, fallbackBranch) {
689
914
  return operationsByTag.database.resolveBranch({
690
915
  pathParams: { workspace, dbName },
691
- queryParams: { gitBranch },
916
+ queryParams: { gitBranch, fallbackBranch },
692
917
  ...this.extraProps
693
918
  });
694
919
  }
@@ -736,27 +961,6 @@ class BranchApi {
736
961
  ...this.extraProps
737
962
  });
738
963
  }
739
- getBranchMigrationHistory(workspace, database, branch, options = {}) {
740
- return operationsByTag.branch.getBranchMigrationHistory({
741
- pathParams: { workspace, dbBranchName: `${database}:${branch}` },
742
- body: options,
743
- ...this.extraProps
744
- });
745
- }
746
- executeBranchMigrationPlan(workspace, database, branch, migrationPlan) {
747
- return operationsByTag.branch.executeBranchMigrationPlan({
748
- pathParams: { workspace, dbBranchName: `${database}:${branch}` },
749
- body: migrationPlan,
750
- ...this.extraProps
751
- });
752
- }
753
- getBranchMigrationPlan(workspace, database, branch, schema) {
754
- return operationsByTag.branch.getBranchMigrationPlan({
755
- pathParams: { workspace, dbBranchName: `${database}:${branch}` },
756
- body: schema,
757
- ...this.extraProps
758
- });
759
- }
760
964
  getBranchStats(workspace, database, branch) {
761
965
  return operationsByTag.branch.getBranchStats({
762
966
  pathParams: { workspace, dbBranchName: `${database}:${branch}` },
@@ -837,9 +1041,10 @@ class RecordsApi {
837
1041
  constructor(extraProps) {
838
1042
  this.extraProps = extraProps;
839
1043
  }
840
- insertRecord(workspace, database, branch, tableName, record) {
1044
+ insertRecord(workspace, database, branch, tableName, record, options = {}) {
841
1045
  return operationsByTag.records.insertRecord({
842
1046
  pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },
1047
+ queryParams: options,
843
1048
  body: record,
844
1049
  ...this.extraProps
845
1050
  });
@@ -868,21 +1073,24 @@ class RecordsApi {
868
1073
  ...this.extraProps
869
1074
  });
870
1075
  }
871
- deleteRecord(workspace, database, branch, tableName, recordId) {
1076
+ deleteRecord(workspace, database, branch, tableName, recordId, options = {}) {
872
1077
  return operationsByTag.records.deleteRecord({
873
1078
  pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, recordId },
1079
+ queryParams: options,
874
1080
  ...this.extraProps
875
1081
  });
876
1082
  }
877
1083
  getRecord(workspace, database, branch, tableName, recordId, options = {}) {
878
1084
  return operationsByTag.records.getRecord({
879
1085
  pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, recordId },
1086
+ queryParams: options,
880
1087
  ...this.extraProps
881
1088
  });
882
1089
  }
883
- bulkInsertTableRecords(workspace, database, branch, tableName, records) {
1090
+ bulkInsertTableRecords(workspace, database, branch, tableName, records, options = {}) {
884
1091
  return operationsByTag.records.bulkInsertTableRecords({
885
1092
  pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },
1093
+ queryParams: options,
886
1094
  body: { records },
887
1095
  ...this.extraProps
888
1096
  });
@@ -909,6 +1117,131 @@ class RecordsApi {
909
1117
  });
910
1118
  }
911
1119
  }
1120
+ class MigrationRequestsApi {
1121
+ constructor(extraProps) {
1122
+ this.extraProps = extraProps;
1123
+ }
1124
+ listMigrationRequests(workspace, database, options = {}) {
1125
+ return operationsByTag.migrationRequests.listMigrationRequests({
1126
+ pathParams: { workspace, dbName: database },
1127
+ body: options,
1128
+ ...this.extraProps
1129
+ });
1130
+ }
1131
+ createMigrationRequest(workspace, database, options) {
1132
+ return operationsByTag.migrationRequests.createMigrationRequest({
1133
+ pathParams: { workspace, dbName: database },
1134
+ body: options,
1135
+ ...this.extraProps
1136
+ });
1137
+ }
1138
+ getMigrationRequest(workspace, database, migrationRequest) {
1139
+ return operationsByTag.migrationRequests.getMigrationRequest({
1140
+ pathParams: { workspace, dbName: database, mrNumber: migrationRequest },
1141
+ ...this.extraProps
1142
+ });
1143
+ }
1144
+ updateMigrationRequest(workspace, database, migrationRequest, options) {
1145
+ return operationsByTag.migrationRequests.updateMigrationRequest({
1146
+ pathParams: { workspace, dbName: database, mrNumber: migrationRequest },
1147
+ body: options,
1148
+ ...this.extraProps
1149
+ });
1150
+ }
1151
+ listMigrationRequestsCommits(workspace, database, migrationRequest, options = {}) {
1152
+ return operationsByTag.migrationRequests.listMigrationRequestsCommits({
1153
+ pathParams: { workspace, dbName: database, mrNumber: migrationRequest },
1154
+ body: options,
1155
+ ...this.extraProps
1156
+ });
1157
+ }
1158
+ compareMigrationRequest(workspace, database, migrationRequest) {
1159
+ return operationsByTag.migrationRequests.compareMigrationRequest({
1160
+ pathParams: { workspace, dbName: database, mrNumber: migrationRequest },
1161
+ ...this.extraProps
1162
+ });
1163
+ }
1164
+ getMigrationRequestIsMerged(workspace, database, migrationRequest) {
1165
+ return operationsByTag.migrationRequests.getMigrationRequestIsMerged({
1166
+ pathParams: { workspace, dbName: database, mrNumber: migrationRequest },
1167
+ ...this.extraProps
1168
+ });
1169
+ }
1170
+ mergeMigrationRequest(workspace, database, migrationRequest) {
1171
+ return operationsByTag.migrationRequests.mergeMigrationRequest({
1172
+ pathParams: { workspace, dbName: database, mrNumber: migrationRequest },
1173
+ ...this.extraProps
1174
+ });
1175
+ }
1176
+ }
1177
+ class BranchSchemaApi {
1178
+ constructor(extraProps) {
1179
+ this.extraProps = extraProps;
1180
+ }
1181
+ getBranchMigrationHistory(workspace, database, branch, options = {}) {
1182
+ return operationsByTag.branchSchema.getBranchMigrationHistory({
1183
+ pathParams: { workspace, dbBranchName: `${database}:${branch}` },
1184
+ body: options,
1185
+ ...this.extraProps
1186
+ });
1187
+ }
1188
+ executeBranchMigrationPlan(workspace, database, branch, migrationPlan) {
1189
+ return operationsByTag.branchSchema.executeBranchMigrationPlan({
1190
+ pathParams: { workspace, dbBranchName: `${database}:${branch}` },
1191
+ body: migrationPlan,
1192
+ ...this.extraProps
1193
+ });
1194
+ }
1195
+ getBranchMigrationPlan(workspace, database, branch, schema) {
1196
+ return operationsByTag.branchSchema.getBranchMigrationPlan({
1197
+ pathParams: { workspace, dbBranchName: `${database}:${branch}` },
1198
+ body: schema,
1199
+ ...this.extraProps
1200
+ });
1201
+ }
1202
+ compareBranchWithUserSchema(workspace, database, branch, schema) {
1203
+ return operationsByTag.branchSchema.compareBranchWithUserSchema({
1204
+ pathParams: { workspace, dbBranchName: `${database}:${branch}` },
1205
+ body: { schema },
1206
+ ...this.extraProps
1207
+ });
1208
+ }
1209
+ compareBranchSchemas(workspace, database, branch, branchName, schema) {
1210
+ return operationsByTag.branchSchema.compareBranchSchemas({
1211
+ pathParams: { workspace, dbBranchName: `${database}:${branch}`, branchName },
1212
+ body: { schema },
1213
+ ...this.extraProps
1214
+ });
1215
+ }
1216
+ updateBranchSchema(workspace, database, branch, migration) {
1217
+ return operationsByTag.branchSchema.updateBranchSchema({
1218
+ pathParams: { workspace, dbBranchName: `${database}:${branch}` },
1219
+ body: migration,
1220
+ ...this.extraProps
1221
+ });
1222
+ }
1223
+ previewBranchSchemaEdit(workspace, database, branch, migration) {
1224
+ return operationsByTag.branchSchema.previewBranchSchemaEdit({
1225
+ pathParams: { workspace, dbBranchName: `${database}:${branch}` },
1226
+ body: migration,
1227
+ ...this.extraProps
1228
+ });
1229
+ }
1230
+ applyBranchSchemaEdit(workspace, database, branch, edits) {
1231
+ return operationsByTag.branchSchema.applyBranchSchemaEdit({
1232
+ pathParams: { workspace, dbBranchName: `${database}:${branch}` },
1233
+ body: { edits },
1234
+ ...this.extraProps
1235
+ });
1236
+ }
1237
+ getBranchSchemaHistory(workspace, database, branch, options = {}) {
1238
+ return operationsByTag.branchSchema.getBranchSchemaHistory({
1239
+ pathParams: { workspace, dbBranchName: `${database}:${branch}` },
1240
+ body: options,
1241
+ ...this.extraProps
1242
+ });
1243
+ }
1244
+ }
912
1245
 
913
1246
  class XataApiPlugin {
914
1247
  async build(options) {
@@ -933,18 +1266,18 @@ var __privateAdd$6 = (obj, member, value) => {
933
1266
  throw TypeError("Cannot add the same private member more than once");
934
1267
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
935
1268
  };
936
- var __privateSet$5 = (obj, member, value, setter) => {
1269
+ var __privateSet$6 = (obj, member, value, setter) => {
937
1270
  __accessCheck$6(obj, member, "write to private field");
938
1271
  setter ? setter.call(obj, value) : member.set(obj, value);
939
1272
  return value;
940
1273
  };
941
- var _query;
1274
+ var _query, _page;
942
1275
  class Page {
943
1276
  constructor(query, meta, records = []) {
944
1277
  __privateAdd$6(this, _query, void 0);
945
- __privateSet$5(this, _query, query);
1278
+ __privateSet$6(this, _query, query);
946
1279
  this.meta = meta;
947
- this.records = records;
1280
+ this.records = new RecordArray(this, records);
948
1281
  }
949
1282
  async nextPage(size, offset) {
950
1283
  return __privateGet$6(this, _query).getPaginated({ pagination: { size, offset, after: this.meta.page.cursor } });
@@ -964,9 +1297,56 @@ class Page {
964
1297
  }
965
1298
  _query = new WeakMap();
966
1299
  const PAGINATION_MAX_SIZE = 200;
967
- const PAGINATION_DEFAULT_SIZE = 200;
1300
+ const PAGINATION_DEFAULT_SIZE = 20;
968
1301
  const PAGINATION_MAX_OFFSET = 800;
969
1302
  const PAGINATION_DEFAULT_OFFSET = 0;
1303
+ function isCursorPaginationOptions(options) {
1304
+ return isDefined(options) && (isDefined(options.first) || isDefined(options.last) || isDefined(options.after) || isDefined(options.before));
1305
+ }
1306
+ const _RecordArray = class extends Array {
1307
+ constructor(...args) {
1308
+ super(..._RecordArray.parseConstructorParams(...args));
1309
+ __privateAdd$6(this, _page, void 0);
1310
+ __privateSet$6(this, _page, isObject(args[0]?.meta) ? args[0] : { meta: { page: { cursor: "", more: false } }, records: [] });
1311
+ }
1312
+ static parseConstructorParams(...args) {
1313
+ if (args.length === 1 && typeof args[0] === "number") {
1314
+ return new Array(args[0]);
1315
+ }
1316
+ if (args.length <= 2 && isObject(args[0]?.meta) && Array.isArray(args[1] ?? [])) {
1317
+ const result = args[1] ?? args[0].records ?? [];
1318
+ return new Array(...result);
1319
+ }
1320
+ return new Array(...args);
1321
+ }
1322
+ toArray() {
1323
+ return new Array(...this);
1324
+ }
1325
+ map(callbackfn, thisArg) {
1326
+ return this.toArray().map(callbackfn, thisArg);
1327
+ }
1328
+ async nextPage(size, offset) {
1329
+ const newPage = await __privateGet$6(this, _page).nextPage(size, offset);
1330
+ return new _RecordArray(newPage);
1331
+ }
1332
+ async previousPage(size, offset) {
1333
+ const newPage = await __privateGet$6(this, _page).previousPage(size, offset);
1334
+ return new _RecordArray(newPage);
1335
+ }
1336
+ async firstPage(size, offset) {
1337
+ const newPage = await __privateGet$6(this, _page).firstPage(size, offset);
1338
+ return new _RecordArray(newPage);
1339
+ }
1340
+ async lastPage(size, offset) {
1341
+ const newPage = await __privateGet$6(this, _page).lastPage(size, offset);
1342
+ return new _RecordArray(newPage);
1343
+ }
1344
+ hasNextPage() {
1345
+ return __privateGet$6(this, _page).meta.page.more;
1346
+ }
1347
+ };
1348
+ let RecordArray = _RecordArray;
1349
+ _page = new WeakMap();
970
1350
 
971
1351
  var __accessCheck$5 = (obj, member, msg) => {
972
1352
  if (!member.has(obj))
@@ -981,25 +1361,26 @@ var __privateAdd$5 = (obj, member, value) => {
981
1361
  throw TypeError("Cannot add the same private member more than once");
982
1362
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
983
1363
  };
984
- var __privateSet$4 = (obj, member, value, setter) => {
1364
+ var __privateSet$5 = (obj, member, value, setter) => {
985
1365
  __accessCheck$5(obj, member, "write to private field");
986
1366
  setter ? setter.call(obj, value) : member.set(obj, value);
987
1367
  return value;
988
1368
  };
989
1369
  var _table$1, _repository, _data;
990
1370
  const _Query = class {
991
- constructor(repository, table, data, parent) {
1371
+ constructor(repository, table, data, rawParent) {
992
1372
  __privateAdd$5(this, _table$1, void 0);
993
1373
  __privateAdd$5(this, _repository, void 0);
994
1374
  __privateAdd$5(this, _data, { filter: {} });
995
1375
  this.meta = { page: { cursor: "start", more: true } };
996
- this.records = [];
997
- __privateSet$4(this, _table$1, table);
1376
+ this.records = new RecordArray(this, []);
1377
+ __privateSet$5(this, _table$1, table);
998
1378
  if (repository) {
999
- __privateSet$4(this, _repository, repository);
1379
+ __privateSet$5(this, _repository, repository);
1000
1380
  } else {
1001
- __privateSet$4(this, _repository, this);
1381
+ __privateSet$5(this, _repository, this);
1002
1382
  }
1383
+ const parent = cleanParent(data, rawParent);
1003
1384
  __privateGet$5(this, _data).filter = data.filter ?? parent?.filter ?? {};
1004
1385
  __privateGet$5(this, _data).filter.$any = data.filter?.$any ?? parent?.filter?.$any;
1005
1386
  __privateGet$5(this, _data).filter.$all = data.filter?.$all ?? parent?.filter?.$all;
@@ -1044,21 +1425,34 @@ const _Query = class {
1044
1425
  }
1045
1426
  filter(a, b) {
1046
1427
  if (arguments.length === 1) {
1047
- const constraints = Object.entries(a).map(([column, constraint]) => ({ [column]: constraint }));
1428
+ const constraints = Object.entries(a ?? {}).map(([column, constraint]) => ({ [column]: constraint }));
1048
1429
  const $all = compact([__privateGet$5(this, _data).filter?.$all].flat().concat(constraints));
1049
1430
  return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { filter: { $all } }, __privateGet$5(this, _data));
1050
1431
  } else {
1051
- const $all = compact([__privateGet$5(this, _data).filter?.$all].flat().concat([{ [a]: b }]));
1432
+ const constraints = isDefined(a) && isDefined(b) ? [{ [a]: this.defaultFilter(a, b) }] : void 0;
1433
+ const $all = compact([__privateGet$5(this, _data).filter?.$all].flat().concat(constraints));
1052
1434
  return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { filter: { $all } }, __privateGet$5(this, _data));
1053
1435
  }
1054
1436
  }
1055
- sort(column, direction) {
1437
+ defaultFilter(column, value) {
1438
+ const columnType = __privateGet$5(this, _table$1).schema?.columns.find(({ name }) => name === column)?.type;
1439
+ if (columnType === "multiple" && (isString(value) || isStringArray(value))) {
1440
+ return { $includes: value };
1441
+ }
1442
+ return value;
1443
+ }
1444
+ sort(column, direction = "asc") {
1056
1445
  const originalSort = [__privateGet$5(this, _data).sort ?? []].flat();
1057
1446
  const sort = [...originalSort, { column, direction }];
1058
1447
  return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { sort }, __privateGet$5(this, _data));
1059
1448
  }
1060
1449
  select(columns) {
1061
- return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { columns }, __privateGet$5(this, _data));
1450
+ return new _Query(
1451
+ __privateGet$5(this, _repository),
1452
+ __privateGet$5(this, _table$1),
1453
+ { columns },
1454
+ __privateGet$5(this, _data)
1455
+ );
1062
1456
  }
1063
1457
  getPaginated(options = {}) {
1064
1458
  const query = new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), options, __privateGet$5(this, _data));
@@ -1071,18 +1465,21 @@ const _Query = class {
1071
1465
  }
1072
1466
  async *getIterator(options = {}) {
1073
1467
  const { batchSize = 1 } = options;
1074
- let offset = 0;
1075
- let end = false;
1076
- while (!end) {
1077
- const { records, meta } = await this.getPaginated({ ...options, pagination: { size: batchSize, offset } });
1078
- yield records;
1079
- offset += batchSize;
1080
- end = !meta.page.more;
1468
+ let page = await this.getPaginated({ ...options, pagination: { size: batchSize, offset: 0 } });
1469
+ let more = page.hasNextPage();
1470
+ yield page.records;
1471
+ while (more) {
1472
+ page = await page.nextPage();
1473
+ more = page.hasNextPage();
1474
+ yield page.records;
1081
1475
  }
1082
1476
  }
1083
1477
  async getMany(options = {}) {
1084
- const { records } = await this.getPaginated(options);
1085
- return records;
1478
+ const page = await this.getPaginated(options);
1479
+ if (page.hasNextPage() && options.pagination?.size === void 0) {
1480
+ console.trace("Calling getMany does not return all results. Paginate to get all results or call getAll.");
1481
+ }
1482
+ return page.records;
1086
1483
  }
1087
1484
  async getAll(options = {}) {
1088
1485
  const { batchSize = PAGINATION_MAX_SIZE, ...rest } = options;
@@ -1119,12 +1516,20 @@ let Query = _Query;
1119
1516
  _table$1 = new WeakMap();
1120
1517
  _repository = new WeakMap();
1121
1518
  _data = new WeakMap();
1519
+ function cleanParent(data, parent) {
1520
+ if (isCursorPaginationOptions(data.pagination)) {
1521
+ return { ...parent, sorting: void 0, filter: void 0 };
1522
+ }
1523
+ return parent;
1524
+ }
1122
1525
 
1123
1526
  function isIdentifiable(x) {
1124
1527
  return isObject(x) && isString(x?.id);
1125
1528
  }
1126
1529
  function isXataRecord(x) {
1127
- return isIdentifiable(x) && typeof x?.xata === "object" && typeof x?.xata?.version === "number";
1530
+ const record = x;
1531
+ const metadata = record?.getMetadata();
1532
+ return isIdentifiable(x) && isObject(metadata) && typeof metadata.version === "number";
1128
1533
  }
1129
1534
 
1130
1535
  function isSortFilterString(value) {
@@ -1163,7 +1568,7 @@ var __privateAdd$4 = (obj, member, value) => {
1163
1568
  throw TypeError("Cannot add the same private member more than once");
1164
1569
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
1165
1570
  };
1166
- var __privateSet$3 = (obj, member, value, setter) => {
1571
+ var __privateSet$4 = (obj, member, value, setter) => {
1167
1572
  __accessCheck$4(obj, member, "write to private field");
1168
1573
  setter ? setter.call(obj, value) : member.set(obj, value);
1169
1574
  return value;
@@ -1172,184 +1577,228 @@ var __privateMethod$2 = (obj, member, method) => {
1172
1577
  __accessCheck$4(obj, member, "access private method");
1173
1578
  return method;
1174
1579
  };
1175
- 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;
1580
+ 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;
1176
1581
  class Repository extends Query {
1177
1582
  }
1178
1583
  class RestRepository extends Query {
1179
1584
  constructor(options) {
1180
- super(null, options.table, {});
1585
+ super(
1586
+ null,
1587
+ { name: options.table, schema: options.schemaTables?.find((table) => table.name === options.table) },
1588
+ {}
1589
+ );
1181
1590
  __privateAdd$4(this, _insertRecordWithoutId);
1182
1591
  __privateAdd$4(this, _insertRecordWithId);
1183
1592
  __privateAdd$4(this, _bulkInsertTableRecords);
1184
1593
  __privateAdd$4(this, _updateRecordWithID);
1185
1594
  __privateAdd$4(this, _upsertRecordWithID);
1186
1595
  __privateAdd$4(this, _deleteRecord);
1187
- __privateAdd$4(this, _invalidateCache);
1188
- __privateAdd$4(this, _setCacheRecord);
1189
- __privateAdd$4(this, _getCacheRecord);
1190
1596
  __privateAdd$4(this, _setCacheQuery);
1191
1597
  __privateAdd$4(this, _getCacheQuery);
1192
- __privateAdd$4(this, _getSchema$1);
1598
+ __privateAdd$4(this, _getSchemaTables$1);
1193
1599
  __privateAdd$4(this, _table, void 0);
1194
1600
  __privateAdd$4(this, _getFetchProps, void 0);
1601
+ __privateAdd$4(this, _db, void 0);
1195
1602
  __privateAdd$4(this, _cache, void 0);
1196
- __privateAdd$4(this, _schema$1, void 0);
1197
- __privateSet$3(this, _table, options.table);
1198
- __privateSet$3(this, _getFetchProps, options.pluginOptions.getFetchProps);
1199
- this.db = options.db;
1200
- __privateSet$3(this, _cache, options.pluginOptions.cache);
1201
- }
1202
- async create(a, b) {
1203
- if (Array.isArray(a)) {
1204
- const records = await __privateMethod$2(this, _bulkInsertTableRecords, bulkInsertTableRecords_fn).call(this, a);
1205
- await Promise.all(records.map((record) => __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record)));
1206
- return records;
1207
- }
1208
- if (isString(a) && isObject(b)) {
1209
- if (a === "")
1210
- throw new Error("The id can't be empty");
1211
- const record = await __privateMethod$2(this, _insertRecordWithId, insertRecordWithId_fn).call(this, a, b);
1212
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1213
- return record;
1214
- }
1215
- if (isObject(a) && isString(a.id)) {
1216
- if (a.id === "")
1217
- throw new Error("The id can't be empty");
1218
- const record = await __privateMethod$2(this, _insertRecordWithId, insertRecordWithId_fn).call(this, a.id, { ...a, id: void 0 });
1219
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1220
- return record;
1221
- }
1222
- if (isObject(a)) {
1223
- const record = await __privateMethod$2(this, _insertRecordWithoutId, insertRecordWithoutId_fn).call(this, a);
1224
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1225
- return record;
1226
- }
1227
- throw new Error("Invalid arguments for create method");
1228
- }
1229
- async read(recordId) {
1230
- const cacheRecord = await __privateMethod$2(this, _getCacheRecord, getCacheRecord_fn).call(this, recordId);
1231
- if (cacheRecord)
1232
- return cacheRecord;
1233
- const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1234
- try {
1235
- const response = await getRecord({
1236
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table), recordId },
1237
- ...fetchProps
1603
+ __privateAdd$4(this, _schemaTables$2, void 0);
1604
+ __privateAdd$4(this, _trace, void 0);
1605
+ __privateSet$4(this, _table, options.table);
1606
+ __privateSet$4(this, _getFetchProps, options.pluginOptions.getFetchProps);
1607
+ __privateSet$4(this, _db, options.db);
1608
+ __privateSet$4(this, _cache, options.pluginOptions.cache);
1609
+ __privateSet$4(this, _schemaTables$2, options.schemaTables);
1610
+ const trace = options.pluginOptions.trace ?? defaultTrace;
1611
+ __privateSet$4(this, _trace, async (name, fn, options2 = {}) => {
1612
+ return trace(name, fn, {
1613
+ ...options2,
1614
+ [TraceAttributes.TABLE]: __privateGet$4(this, _table),
1615
+ [TraceAttributes.KIND]: "sdk-operation",
1616
+ [TraceAttributes.VERSION]: VERSION
1238
1617
  });
1239
- const schema = await __privateMethod$2(this, _getSchema$1, getSchema_fn$1).call(this);
1240
- return initObject(this.db, schema, __privateGet$4(this, _table), response);
1241
- } catch (e) {
1242
- if (isObject(e) && e.status === 404) {
1243
- return null;
1618
+ });
1619
+ }
1620
+ async create(a, b, c) {
1621
+ return __privateGet$4(this, _trace).call(this, "create", async () => {
1622
+ if (Array.isArray(a)) {
1623
+ if (a.length === 0)
1624
+ return [];
1625
+ const columns = isStringArray(b) ? b : void 0;
1626
+ return __privateMethod$2(this, _bulkInsertTableRecords, bulkInsertTableRecords_fn).call(this, a, columns);
1244
1627
  }
1245
- throw e;
1246
- }
1628
+ if (isString(a) && isObject(b)) {
1629
+ if (a === "")
1630
+ throw new Error("The id can't be empty");
1631
+ const columns = isStringArray(c) ? c : void 0;
1632
+ return __privateMethod$2(this, _insertRecordWithId, insertRecordWithId_fn).call(this, a, b, columns);
1633
+ }
1634
+ if (isObject(a) && isString(a.id)) {
1635
+ if (a.id === "")
1636
+ throw new Error("The id can't be empty");
1637
+ const columns = isStringArray(b) ? b : void 0;
1638
+ return __privateMethod$2(this, _insertRecordWithId, insertRecordWithId_fn).call(this, a.id, { ...a, id: void 0 }, columns);
1639
+ }
1640
+ if (isObject(a)) {
1641
+ const columns = isStringArray(b) ? b : void 0;
1642
+ return __privateMethod$2(this, _insertRecordWithoutId, insertRecordWithoutId_fn).call(this, a, columns);
1643
+ }
1644
+ throw new Error("Invalid arguments for create method");
1645
+ });
1247
1646
  }
1248
- async update(a, b) {
1249
- if (Array.isArray(a)) {
1250
- if (a.length > 100) {
1251
- console.warn("Bulk update operation is not optimized in the Xata API yet, this request might be slow");
1647
+ async read(a, b) {
1648
+ return __privateGet$4(this, _trace).call(this, "read", async () => {
1649
+ const columns = isStringArray(b) ? b : ["*"];
1650
+ if (Array.isArray(a)) {
1651
+ if (a.length === 0)
1652
+ return [];
1653
+ const ids = a.map((item) => extractId(item));
1654
+ const finalObjects = await this.getAll({ filter: { id: { $any: compact(ids) } }, columns });
1655
+ const dictionary = finalObjects.reduce((acc, object) => {
1656
+ acc[object.id] = object;
1657
+ return acc;
1658
+ }, {});
1659
+ return ids.map((id2) => dictionary[id2 ?? ""] ?? null);
1252
1660
  }
1253
- return Promise.all(a.map((object) => this.update(object)));
1254
- }
1255
- if (isString(a) && isObject(b)) {
1256
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a);
1257
- const record = await __privateMethod$2(this, _updateRecordWithID, updateRecordWithID_fn).call(this, a, b);
1258
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1259
- return record;
1260
- }
1261
- if (isObject(a) && isString(a.id)) {
1262
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a.id);
1263
- const record = await __privateMethod$2(this, _updateRecordWithID, updateRecordWithID_fn).call(this, a.id, { ...a, id: void 0 });
1264
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1265
- return record;
1266
- }
1267
- throw new Error("Invalid arguments for update method");
1661
+ const id = extractId(a);
1662
+ if (id) {
1663
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1664
+ try {
1665
+ const response = await getRecord({
1666
+ pathParams: {
1667
+ workspace: "{workspaceId}",
1668
+ dbBranchName: "{dbBranch}",
1669
+ tableName: __privateGet$4(this, _table),
1670
+ recordId: id
1671
+ },
1672
+ queryParams: { columns },
1673
+ ...fetchProps
1674
+ });
1675
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
1676
+ return initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), response);
1677
+ } catch (e) {
1678
+ if (isObject(e) && e.status === 404) {
1679
+ return null;
1680
+ }
1681
+ throw e;
1682
+ }
1683
+ }
1684
+ return null;
1685
+ });
1268
1686
  }
1269
- async createOrUpdate(a, b) {
1270
- if (Array.isArray(a)) {
1271
- if (a.length > 100) {
1272
- console.warn("Bulk update operation is not optimized in the Xata API yet, this request might be slow");
1687
+ async update(a, b, c) {
1688
+ return __privateGet$4(this, _trace).call(this, "update", async () => {
1689
+ if (Array.isArray(a)) {
1690
+ if (a.length === 0)
1691
+ return [];
1692
+ if (a.length > 100) {
1693
+ console.warn("Bulk update operation is not optimized in the Xata API yet, this request might be slow");
1694
+ }
1695
+ const columns = isStringArray(b) ? b : ["*"];
1696
+ return Promise.all(a.map((object) => this.update(object, columns)));
1273
1697
  }
1274
- return Promise.all(a.map((object) => this.createOrUpdate(object)));
1275
- }
1276
- if (isString(a) && isObject(b)) {
1277
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a);
1278
- const record = await __privateMethod$2(this, _upsertRecordWithID, upsertRecordWithID_fn).call(this, a, b);
1279
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1280
- return record;
1281
- }
1282
- if (isObject(a) && isString(a.id)) {
1283
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a.id);
1284
- const record = await __privateMethod$2(this, _upsertRecordWithID, upsertRecordWithID_fn).call(this, a.id, { ...a, id: void 0 });
1285
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1286
- return record;
1287
- }
1288
- throw new Error("Invalid arguments for createOrUpdate method");
1698
+ if (isString(a) && isObject(b)) {
1699
+ const columns = isStringArray(c) ? c : void 0;
1700
+ return __privateMethod$2(this, _updateRecordWithID, updateRecordWithID_fn).call(this, a, b, columns);
1701
+ }
1702
+ if (isObject(a) && isString(a.id)) {
1703
+ const columns = isStringArray(b) ? b : void 0;
1704
+ return __privateMethod$2(this, _updateRecordWithID, updateRecordWithID_fn).call(this, a.id, { ...a, id: void 0 }, columns);
1705
+ }
1706
+ throw new Error("Invalid arguments for update method");
1707
+ });
1289
1708
  }
1290
- async delete(a) {
1291
- if (Array.isArray(a)) {
1292
- if (a.length > 100) {
1293
- console.warn("Bulk delete operation is not optimized in the Xata API yet, this request might be slow");
1709
+ async createOrUpdate(a, b, c) {
1710
+ return __privateGet$4(this, _trace).call(this, "createOrUpdate", async () => {
1711
+ if (Array.isArray(a)) {
1712
+ if (a.length === 0)
1713
+ return [];
1714
+ if (a.length > 100) {
1715
+ console.warn("Bulk update operation is not optimized in the Xata API yet, this request might be slow");
1716
+ }
1717
+ const columns = isStringArray(b) ? b : ["*"];
1718
+ return Promise.all(a.map((object) => this.createOrUpdate(object, columns)));
1294
1719
  }
1295
- await Promise.all(a.map((id) => this.delete(id)));
1296
- return;
1297
- }
1298
- if (isString(a)) {
1299
- await __privateMethod$2(this, _deleteRecord, deleteRecord_fn).call(this, a);
1300
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a);
1301
- return;
1302
- }
1303
- if (isObject(a) && isString(a.id)) {
1304
- await __privateMethod$2(this, _deleteRecord, deleteRecord_fn).call(this, a.id);
1305
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a.id);
1306
- return;
1307
- }
1308
- throw new Error("Invalid arguments for delete method");
1720
+ if (isString(a) && isObject(b)) {
1721
+ const columns = isStringArray(c) ? c : void 0;
1722
+ return __privateMethod$2(this, _upsertRecordWithID, upsertRecordWithID_fn).call(this, a, b, columns);
1723
+ }
1724
+ if (isObject(a) && isString(a.id)) {
1725
+ const columns = isStringArray(c) ? c : void 0;
1726
+ return __privateMethod$2(this, _upsertRecordWithID, upsertRecordWithID_fn).call(this, a.id, { ...a, id: void 0 }, columns);
1727
+ }
1728
+ throw new Error("Invalid arguments for createOrUpdate method");
1729
+ });
1730
+ }
1731
+ async delete(a, b) {
1732
+ return __privateGet$4(this, _trace).call(this, "delete", async () => {
1733
+ if (Array.isArray(a)) {
1734
+ if (a.length === 0)
1735
+ return [];
1736
+ if (a.length > 100) {
1737
+ console.warn("Bulk delete operation is not optimized in the Xata API yet, this request might be slow");
1738
+ }
1739
+ return Promise.all(a.map((id) => this.delete(id, b)));
1740
+ }
1741
+ if (isString(a)) {
1742
+ return __privateMethod$2(this, _deleteRecord, deleteRecord_fn).call(this, a, b);
1743
+ }
1744
+ if (isObject(a) && isString(a.id)) {
1745
+ return __privateMethod$2(this, _deleteRecord, deleteRecord_fn).call(this, a.id, b);
1746
+ }
1747
+ throw new Error("Invalid arguments for delete method");
1748
+ });
1309
1749
  }
1310
1750
  async search(query, options = {}) {
1311
- const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1312
- const { records } = await searchTable({
1313
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table) },
1314
- body: {
1315
- query,
1316
- fuzziness: options.fuzziness,
1317
- filter: options.filter
1318
- },
1319
- ...fetchProps
1751
+ return __privateGet$4(this, _trace).call(this, "search", async () => {
1752
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1753
+ const { records } = await searchTable({
1754
+ pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table) },
1755
+ body: {
1756
+ query,
1757
+ fuzziness: options.fuzziness,
1758
+ prefix: options.prefix,
1759
+ highlight: options.highlight,
1760
+ filter: options.filter,
1761
+ boosters: options.boosters
1762
+ },
1763
+ ...fetchProps
1764
+ });
1765
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
1766
+ return records.map((item) => initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), item));
1320
1767
  });
1321
- const schema = await __privateMethod$2(this, _getSchema$1, getSchema_fn$1).call(this);
1322
- return records.map((item) => initObject(this.db, schema, __privateGet$4(this, _table), item));
1323
1768
  }
1324
1769
  async query(query) {
1325
- const cacheQuery = await __privateMethod$2(this, _getCacheQuery, getCacheQuery_fn).call(this, query);
1326
- if (cacheQuery)
1327
- return new Page(query, cacheQuery.meta, cacheQuery.records);
1328
- const data = query.getQueryOptions();
1329
- const body = {
1330
- filter: Object.values(data.filter ?? {}).some(Boolean) ? data.filter : void 0,
1331
- sort: data.sort !== void 0 ? buildSortFilter(data.sort) : void 0,
1332
- page: data.pagination,
1333
- columns: data.columns
1334
- };
1335
- const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1336
- const { meta, records: objects } = await queryTable({
1337
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table) },
1338
- body,
1339
- ...fetchProps
1770
+ return __privateGet$4(this, _trace).call(this, "query", async () => {
1771
+ const cacheQuery = await __privateMethod$2(this, _getCacheQuery, getCacheQuery_fn).call(this, query);
1772
+ if (cacheQuery)
1773
+ return new Page(query, cacheQuery.meta, cacheQuery.records);
1774
+ const data = query.getQueryOptions();
1775
+ const body = {
1776
+ filter: cleanFilter(data.filter),
1777
+ sort: data.sort !== void 0 ? buildSortFilter(data.sort) : void 0,
1778
+ page: data.pagination,
1779
+ columns: data.columns
1780
+ };
1781
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1782
+ const { meta, records: objects } = await queryTable({
1783
+ pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table) },
1784
+ body,
1785
+ ...fetchProps
1786
+ });
1787
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
1788
+ const records = objects.map((record) => initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), record));
1789
+ await __privateMethod$2(this, _setCacheQuery, setCacheQuery_fn).call(this, query, meta, records);
1790
+ return new Page(query, meta, records);
1340
1791
  });
1341
- const schema = await __privateMethod$2(this, _getSchema$1, getSchema_fn$1).call(this);
1342
- const records = objects.map((record) => initObject(this.db, schema, __privateGet$4(this, _table), record));
1343
- await __privateMethod$2(this, _setCacheQuery, setCacheQuery_fn).call(this, query, meta, records);
1344
- return new Page(query, meta, records);
1345
1792
  }
1346
1793
  }
1347
1794
  _table = new WeakMap();
1348
1795
  _getFetchProps = new WeakMap();
1796
+ _db = new WeakMap();
1349
1797
  _cache = new WeakMap();
1350
- _schema$1 = new WeakMap();
1798
+ _schemaTables$2 = new WeakMap();
1799
+ _trace = new WeakMap();
1351
1800
  _insertRecordWithoutId = new WeakSet();
1352
- insertRecordWithoutId_fn = async function(object) {
1801
+ insertRecordWithoutId_fn = async function(object, columns = ["*"]) {
1353
1802
  const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1354
1803
  const record = transformObjectLinks(object);
1355
1804
  const response = await insertRecord({
@@ -1358,17 +1807,15 @@ insertRecordWithoutId_fn = async function(object) {
1358
1807
  dbBranchName: "{dbBranch}",
1359
1808
  tableName: __privateGet$4(this, _table)
1360
1809
  },
1810
+ queryParams: { columns },
1361
1811
  body: record,
1362
1812
  ...fetchProps
1363
1813
  });
1364
- const finalObject = await this.read(response.id);
1365
- if (!finalObject) {
1366
- throw new Error("The server failed to save the record");
1367
- }
1368
- return finalObject;
1814
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
1815
+ return initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), response);
1369
1816
  };
1370
1817
  _insertRecordWithId = new WeakSet();
1371
- insertRecordWithId_fn = async function(recordId, object) {
1818
+ insertRecordWithId_fn = async function(recordId, object, columns = ["*"]) {
1372
1819
  const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1373
1820
  const record = transformObjectLinks(object);
1374
1821
  const response = await insertRecordWithID({
@@ -1379,88 +1826,78 @@ insertRecordWithId_fn = async function(recordId, object) {
1379
1826
  recordId
1380
1827
  },
1381
1828
  body: record,
1382
- queryParams: { createOnly: true },
1829
+ queryParams: { createOnly: true, columns },
1383
1830
  ...fetchProps
1384
1831
  });
1385
- const finalObject = await this.read(response.id);
1386
- if (!finalObject) {
1387
- throw new Error("The server failed to save the record");
1388
- }
1389
- return finalObject;
1832
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
1833
+ return initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), response);
1390
1834
  };
1391
1835
  _bulkInsertTableRecords = new WeakSet();
1392
- bulkInsertTableRecords_fn = async function(objects) {
1836
+ bulkInsertTableRecords_fn = async function(objects, columns = ["*"]) {
1393
1837
  const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1394
1838
  const records = objects.map((object) => transformObjectLinks(object));
1395
1839
  const response = await bulkInsertTableRecords({
1396
1840
  pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table) },
1841
+ queryParams: { columns },
1397
1842
  body: { records },
1398
1843
  ...fetchProps
1399
1844
  });
1400
- const finalObjects = await this.any(...response.recordIDs.map((id) => this.filter("id", id))).getAll();
1401
- if (finalObjects.length !== objects.length) {
1402
- throw new Error("The server failed to save some records");
1845
+ if (!isResponseWithRecords(response)) {
1846
+ throw new Error("Request included columns but server didn't include them");
1403
1847
  }
1404
- return finalObjects;
1848
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
1849
+ return response.records?.map((item) => initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), item));
1405
1850
  };
1406
1851
  _updateRecordWithID = new WeakSet();
1407
- updateRecordWithID_fn = async function(recordId, object) {
1852
+ updateRecordWithID_fn = async function(recordId, object, columns = ["*"]) {
1408
1853
  const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1409
1854
  const record = transformObjectLinks(object);
1410
- const response = await updateRecordWithID({
1411
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table), recordId },
1412
- body: record,
1413
- ...fetchProps
1414
- });
1415
- const item = await this.read(response.id);
1416
- if (!item)
1417
- throw new Error("The server failed to save the record");
1418
- return item;
1855
+ try {
1856
+ const response = await updateRecordWithID({
1857
+ pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table), recordId },
1858
+ queryParams: { columns },
1859
+ body: record,
1860
+ ...fetchProps
1861
+ });
1862
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
1863
+ return initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), response);
1864
+ } catch (e) {
1865
+ if (isObject(e) && e.status === 404) {
1866
+ return null;
1867
+ }
1868
+ throw e;
1869
+ }
1419
1870
  };
1420
1871
  _upsertRecordWithID = new WeakSet();
1421
- upsertRecordWithID_fn = async function(recordId, object) {
1872
+ upsertRecordWithID_fn = async function(recordId, object, columns = ["*"]) {
1422
1873
  const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1423
1874
  const response = await upsertRecordWithID({
1424
1875
  pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table), recordId },
1876
+ queryParams: { columns },
1425
1877
  body: object,
1426
1878
  ...fetchProps
1427
1879
  });
1428
- const item = await this.read(response.id);
1429
- if (!item)
1430
- throw new Error("The server failed to save the record");
1431
- return item;
1880
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
1881
+ return initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), response);
1432
1882
  };
1433
1883
  _deleteRecord = new WeakSet();
1434
- deleteRecord_fn = async function(recordId) {
1884
+ deleteRecord_fn = async function(recordId, columns = ["*"]) {
1435
1885
  const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1436
- await deleteRecord({
1437
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table), recordId },
1438
- ...fetchProps
1439
- });
1440
- };
1441
- _invalidateCache = new WeakSet();
1442
- invalidateCache_fn = async function(recordId) {
1443
- await __privateGet$4(this, _cache).delete(`rec_${__privateGet$4(this, _table)}:${recordId}`);
1444
- const cacheItems = await __privateGet$4(this, _cache).getAll();
1445
- const queries = Object.entries(cacheItems).filter(([key]) => key.startsWith("query_"));
1446
- for (const [key, value] of queries) {
1447
- const ids = getIds(value);
1448
- if (ids.includes(recordId))
1449
- await __privateGet$4(this, _cache).delete(key);
1886
+ try {
1887
+ const response = await deleteRecord({
1888
+ pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table), recordId },
1889
+ queryParams: { columns },
1890
+ ...fetchProps
1891
+ });
1892
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
1893
+ return initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), response);
1894
+ } catch (e) {
1895
+ if (isObject(e) && e.status === 404) {
1896
+ return null;
1897
+ }
1898
+ throw e;
1450
1899
  }
1451
1900
  };
1452
- _setCacheRecord = new WeakSet();
1453
- setCacheRecord_fn = async function(record) {
1454
- if (!__privateGet$4(this, _cache).cacheRecords)
1455
- return;
1456
- await __privateGet$4(this, _cache).set(`rec_${__privateGet$4(this, _table)}:${record.id}`, record);
1457
- };
1458
- _getCacheRecord = new WeakSet();
1459
- getCacheRecord_fn = async function(recordId) {
1460
- if (!__privateGet$4(this, _cache).cacheRecords)
1461
- return null;
1462
- return __privateGet$4(this, _cache).get(`rec_${__privateGet$4(this, _table)}:${recordId}`);
1463
- };
1464
1901
  _setCacheQuery = new WeakSet();
1465
1902
  setCacheQuery_fn = async function(query, meta, records) {
1466
1903
  await __privateGet$4(this, _cache).set(`query_${__privateGet$4(this, _table)}:${query.key()}`, { date: new Date(), meta, records });
@@ -1477,17 +1914,17 @@ getCacheQuery_fn = async function(query) {
1477
1914
  const hasExpired = result.date.getTime() + ttl < Date.now();
1478
1915
  return hasExpired ? null : result;
1479
1916
  };
1480
- _getSchema$1 = new WeakSet();
1481
- getSchema_fn$1 = async function() {
1482
- if (__privateGet$4(this, _schema$1))
1483
- return __privateGet$4(this, _schema$1);
1917
+ _getSchemaTables$1 = new WeakSet();
1918
+ getSchemaTables_fn$1 = async function() {
1919
+ if (__privateGet$4(this, _schemaTables$2))
1920
+ return __privateGet$4(this, _schemaTables$2);
1484
1921
  const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1485
1922
  const { schema } = await getBranchDetails({
1486
1923
  pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}" },
1487
1924
  ...fetchProps
1488
1925
  });
1489
- __privateSet$3(this, _schema$1, schema);
1490
- return schema;
1926
+ __privateSet$4(this, _schemaTables$2, schema.tables);
1927
+ return schema.tables;
1491
1928
  };
1492
1929
  const transformObjectLinks = (object) => {
1493
1930
  return Object.entries(object).reduce((acc, [key, value]) => {
@@ -1496,20 +1933,21 @@ const transformObjectLinks = (object) => {
1496
1933
  return { ...acc, [key]: isIdentifiable(value) ? value.id : value };
1497
1934
  }, {});
1498
1935
  };
1499
- const initObject = (db, schema, table, object) => {
1936
+ const initObject = (db, schemaTables, table, object) => {
1500
1937
  const result = {};
1501
- Object.assign(result, object);
1502
- const { columns } = schema.tables.find(({ name }) => name === table) ?? {};
1938
+ const { xata, ...rest } = object ?? {};
1939
+ Object.assign(result, rest);
1940
+ const { columns } = schemaTables.find(({ name }) => name === table) ?? {};
1503
1941
  if (!columns)
1504
1942
  console.error(`Table ${table} not found in schema`);
1505
1943
  for (const column of columns ?? []) {
1506
1944
  const value = result[column.name];
1507
1945
  switch (column.type) {
1508
1946
  case "datetime": {
1509
- const date = new Date(value);
1510
- if (isNaN(date.getTime())) {
1947
+ const date = value !== void 0 ? new Date(value) : void 0;
1948
+ if (date && isNaN(date.getTime())) {
1511
1949
  console.error(`Failed to parse date ${value} for field ${column.name}`);
1512
- } else {
1950
+ } else if (date) {
1513
1951
  result[column.name] = date;
1514
1952
  }
1515
1953
  break;
@@ -1519,35 +1957,45 @@ const initObject = (db, schema, table, object) => {
1519
1957
  if (!linkTable) {
1520
1958
  console.error(`Failed to parse link for field ${column.name}`);
1521
1959
  } else if (isObject(value)) {
1522
- result[column.name] = initObject(db, schema, linkTable, value);
1960
+ result[column.name] = initObject(db, schemaTables, linkTable, value);
1523
1961
  }
1524
1962
  break;
1525
1963
  }
1526
1964
  }
1527
1965
  }
1528
- result.read = function() {
1529
- return db[table].read(result["id"]);
1966
+ result.read = function(columns2) {
1967
+ return db[table].read(result["id"], columns2);
1530
1968
  };
1531
- result.update = function(data) {
1532
- return db[table].update(result["id"], data);
1969
+ result.update = function(data, columns2) {
1970
+ return db[table].update(result["id"], data, columns2);
1533
1971
  };
1534
1972
  result.delete = function() {
1535
1973
  return db[table].delete(result["id"]);
1536
1974
  };
1537
- for (const prop of ["read", "update", "delete"]) {
1975
+ result.getMetadata = function() {
1976
+ return xata;
1977
+ };
1978
+ for (const prop of ["read", "update", "delete", "getMetadata"]) {
1538
1979
  Object.defineProperty(result, prop, { enumerable: false });
1539
1980
  }
1540
1981
  Object.freeze(result);
1541
1982
  return result;
1542
1983
  };
1543
- function getIds(value) {
1544
- if (Array.isArray(value)) {
1545
- return value.map((item) => getIds(item)).flat();
1546
- }
1547
- if (!isObject(value))
1548
- return [];
1549
- const nestedIds = Object.values(value).map((item) => getIds(item)).flat();
1550
- return isString(value.id) ? [value.id, ...nestedIds] : nestedIds;
1984
+ function isResponseWithRecords(value) {
1985
+ return isObject(value) && Array.isArray(value.records);
1986
+ }
1987
+ function extractId(value) {
1988
+ if (isString(value))
1989
+ return value;
1990
+ if (isObject(value) && isString(value.id))
1991
+ return value.id;
1992
+ return void 0;
1993
+ }
1994
+ function cleanFilter(filter) {
1995
+ if (!filter)
1996
+ return void 0;
1997
+ const values = Object.values(filter).filter(Boolean).filter((value) => Array.isArray(value) ? value.length > 0 : true);
1998
+ return values.length > 0 ? filter : void 0;
1551
1999
  }
1552
2000
 
1553
2001
  var __accessCheck$3 = (obj, member, msg) => {
@@ -1563,7 +2011,7 @@ var __privateAdd$3 = (obj, member, value) => {
1563
2011
  throw TypeError("Cannot add the same private member more than once");
1564
2012
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
1565
2013
  };
1566
- var __privateSet$2 = (obj, member, value, setter) => {
2014
+ var __privateSet$3 = (obj, member, value, setter) => {
1567
2015
  __accessCheck$3(obj, member, "write to private field");
1568
2016
  setter ? setter.call(obj, value) : member.set(obj, value);
1569
2017
  return value;
@@ -1572,9 +2020,8 @@ var _map;
1572
2020
  class SimpleCache {
1573
2021
  constructor(options = {}) {
1574
2022
  __privateAdd$3(this, _map, void 0);
1575
- __privateSet$2(this, _map, /* @__PURE__ */ new Map());
2023
+ __privateSet$3(this, _map, /* @__PURE__ */ new Map());
1576
2024
  this.capacity = options.max ?? 500;
1577
- this.cacheRecords = options.cacheRecords ?? true;
1578
2025
  this.defaultQueryTTL = options.defaultQueryTTL ?? 60 * 1e3;
1579
2026
  }
1580
2027
  async getAll() {
@@ -1600,18 +2047,25 @@ class SimpleCache {
1600
2047
  }
1601
2048
  _map = new WeakMap();
1602
2049
 
1603
- const gt = (value) => ({ $gt: value });
1604
- const ge = (value) => ({ $ge: value });
1605
- const gte = (value) => ({ $ge: value });
1606
- const lt = (value) => ({ $lt: value });
1607
- const lte = (value) => ({ $le: value });
1608
- const le = (value) => ({ $le: value });
2050
+ const greaterThan = (value) => ({ $gt: value });
2051
+ const gt = greaterThan;
2052
+ const greaterThanEquals = (value) => ({ $ge: value });
2053
+ const greaterEquals = greaterThanEquals;
2054
+ const gte = greaterThanEquals;
2055
+ const ge = greaterThanEquals;
2056
+ const lessThan = (value) => ({ $lt: value });
2057
+ const lt = lessThan;
2058
+ const lessThanEquals = (value) => ({ $le: value });
2059
+ const lessEquals = lessThanEquals;
2060
+ const lte = lessThanEquals;
2061
+ const le = lessThanEquals;
1609
2062
  const exists = (column) => ({ $exists: column });
1610
2063
  const notExists = (column) => ({ $notExists: column });
1611
2064
  const startsWith = (value) => ({ $startsWith: value });
1612
2065
  const endsWith = (value) => ({ $endsWith: value });
1613
2066
  const pattern = (value) => ({ $pattern: value });
1614
2067
  const is = (value) => ({ $is: value });
2068
+ const equals = is;
1615
2069
  const isNot = (value) => ({ $isNot: value });
1616
2070
  const contains = (value) => ({ $contains: value });
1617
2071
  const includes = (value) => ({ $includes: value });
@@ -1632,31 +2086,42 @@ var __privateAdd$2 = (obj, member, value) => {
1632
2086
  throw TypeError("Cannot add the same private member more than once");
1633
2087
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
1634
2088
  };
1635
- var _tables;
2089
+ var __privateSet$2 = (obj, member, value, setter) => {
2090
+ __accessCheck$2(obj, member, "write to private field");
2091
+ setter ? setter.call(obj, value) : member.set(obj, value);
2092
+ return value;
2093
+ };
2094
+ var _tables, _schemaTables$1;
1636
2095
  class SchemaPlugin extends XataPlugin {
1637
- constructor(tableNames) {
2096
+ constructor(schemaTables) {
1638
2097
  super();
1639
- this.tableNames = tableNames;
1640
2098
  __privateAdd$2(this, _tables, {});
2099
+ __privateAdd$2(this, _schemaTables$1, void 0);
2100
+ __privateSet$2(this, _schemaTables$1, schemaTables);
1641
2101
  }
1642
2102
  build(pluginOptions) {
1643
- const db = new Proxy({}, {
1644
- get: (_target, table) => {
1645
- if (!isString(table))
1646
- throw new Error("Invalid table name");
1647
- if (__privateGet$2(this, _tables)[table] === void 0) {
1648
- __privateGet$2(this, _tables)[table] = new RestRepository({ db, pluginOptions, table });
2103
+ const db = new Proxy(
2104
+ {},
2105
+ {
2106
+ get: (_target, table) => {
2107
+ if (!isString(table))
2108
+ throw new Error("Invalid table name");
2109
+ if (__privateGet$2(this, _tables)[table] === void 0) {
2110
+ __privateGet$2(this, _tables)[table] = new RestRepository({ db, pluginOptions, table, schemaTables: __privateGet$2(this, _schemaTables$1) });
2111
+ }
2112
+ return __privateGet$2(this, _tables)[table];
1649
2113
  }
1650
- return __privateGet$2(this, _tables)[table];
1651
2114
  }
1652
- });
1653
- for (const table of this.tableNames ?? []) {
1654
- db[table] = new RestRepository({ db, pluginOptions, table });
2115
+ );
2116
+ const tableNames = __privateGet$2(this, _schemaTables$1)?.map(({ name }) => name) ?? [];
2117
+ for (const table of tableNames) {
2118
+ db[table] = new RestRepository({ db, pluginOptions, table, schemaTables: __privateGet$2(this, _schemaTables$1) });
1655
2119
  }
1656
2120
  return db;
1657
2121
  }
1658
2122
  }
1659
2123
  _tables = new WeakMap();
2124
+ _schemaTables$1 = new WeakMap();
1660
2125
 
1661
2126
  var __accessCheck$1 = (obj, member, msg) => {
1662
2127
  if (!member.has(obj))
@@ -1680,82 +2145,77 @@ var __privateMethod$1 = (obj, member, method) => {
1680
2145
  __accessCheck$1(obj, member, "access private method");
1681
2146
  return method;
1682
2147
  };
1683
- var _schema, _search, search_fn, _getSchema, getSchema_fn;
2148
+ var _schemaTables, _search, search_fn, _getSchemaTables, getSchemaTables_fn;
1684
2149
  class SearchPlugin extends XataPlugin {
1685
- constructor(db) {
2150
+ constructor(db, schemaTables) {
1686
2151
  super();
1687
2152
  this.db = db;
1688
2153
  __privateAdd$1(this, _search);
1689
- __privateAdd$1(this, _getSchema);
1690
- __privateAdd$1(this, _schema, void 0);
2154
+ __privateAdd$1(this, _getSchemaTables);
2155
+ __privateAdd$1(this, _schemaTables, void 0);
2156
+ __privateSet$1(this, _schemaTables, schemaTables);
1691
2157
  }
1692
2158
  build({ getFetchProps }) {
1693
2159
  return {
1694
2160
  all: async (query, options = {}) => {
1695
2161
  const records = await __privateMethod$1(this, _search, search_fn).call(this, query, options, getFetchProps);
1696
- const schema = await __privateMethod$1(this, _getSchema, getSchema_fn).call(this, getFetchProps);
2162
+ const schemaTables = await __privateMethod$1(this, _getSchemaTables, getSchemaTables_fn).call(this, getFetchProps);
1697
2163
  return records.map((record) => {
1698
2164
  const { table = "orphan" } = record.xata;
1699
- return { table, record: initObject(this.db, schema, table, record) };
2165
+ return { table, record: initObject(this.db, schemaTables, table, record) };
1700
2166
  });
1701
2167
  },
1702
2168
  byTable: async (query, options = {}) => {
1703
2169
  const records = await __privateMethod$1(this, _search, search_fn).call(this, query, options, getFetchProps);
1704
- const schema = await __privateMethod$1(this, _getSchema, getSchema_fn).call(this, getFetchProps);
2170
+ const schemaTables = await __privateMethod$1(this, _getSchemaTables, getSchemaTables_fn).call(this, getFetchProps);
1705
2171
  return records.reduce((acc, record) => {
1706
2172
  const { table = "orphan" } = record.xata;
1707
2173
  const items = acc[table] ?? [];
1708
- const item = initObject(this.db, schema, table, record);
2174
+ const item = initObject(this.db, schemaTables, table, record);
1709
2175
  return { ...acc, [table]: [...items, item] };
1710
2176
  }, {});
1711
2177
  }
1712
2178
  };
1713
2179
  }
1714
2180
  }
1715
- _schema = new WeakMap();
2181
+ _schemaTables = new WeakMap();
1716
2182
  _search = new WeakSet();
1717
2183
  search_fn = async function(query, options, getFetchProps) {
1718
2184
  const fetchProps = await getFetchProps();
1719
- const { tables, fuzziness } = options ?? {};
2185
+ const { tables, fuzziness, highlight, prefix } = options ?? {};
1720
2186
  const { records } = await searchBranch({
1721
2187
  pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}" },
1722
- body: { tables, query, fuzziness },
2188
+ body: { tables, query, fuzziness, prefix, highlight },
1723
2189
  ...fetchProps
1724
2190
  });
1725
2191
  return records;
1726
2192
  };
1727
- _getSchema = new WeakSet();
1728
- getSchema_fn = async function(getFetchProps) {
1729
- if (__privateGet$1(this, _schema))
1730
- return __privateGet$1(this, _schema);
2193
+ _getSchemaTables = new WeakSet();
2194
+ getSchemaTables_fn = async function(getFetchProps) {
2195
+ if (__privateGet$1(this, _schemaTables))
2196
+ return __privateGet$1(this, _schemaTables);
1731
2197
  const fetchProps = await getFetchProps();
1732
2198
  const { schema } = await getBranchDetails({
1733
2199
  pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}" },
1734
2200
  ...fetchProps
1735
2201
  });
1736
- __privateSet$1(this, _schema, schema);
1737
- return schema;
2202
+ __privateSet$1(this, _schemaTables, schema.tables);
2203
+ return schema.tables;
1738
2204
  };
1739
2205
 
1740
2206
  const isBranchStrategyBuilder = (strategy) => {
1741
2207
  return typeof strategy === "function";
1742
2208
  };
1743
2209
 
1744
- const envBranchNames = [
1745
- "XATA_BRANCH",
1746
- "VERCEL_GIT_COMMIT_REF",
1747
- "CF_PAGES_BRANCH",
1748
- "BRANCH"
1749
- ];
1750
2210
  async function getCurrentBranchName(options) {
1751
- const env = getBranchByEnvVariable();
1752
- if (env) {
1753
- const details = await getDatabaseBranch(env, options);
2211
+ const { branch, envBranch } = getEnvironment();
2212
+ if (branch) {
2213
+ const details = await getDatabaseBranch(branch, options);
1754
2214
  if (details)
1755
- return env;
1756
- console.warn(`Branch ${env} not found in Xata. Ignoring...`);
2215
+ return branch;
2216
+ console.warn(`Branch ${branch} not found in Xata. Ignoring...`);
1757
2217
  }
1758
- const gitBranch = await getGitBranch();
2218
+ const gitBranch = envBranch || await getGitBranch();
1759
2219
  return resolveXataBranch(gitBranch, options);
1760
2220
  }
1761
2221
  async function getCurrentBranchDetails(options) {
@@ -1766,18 +2226,24 @@ async function resolveXataBranch(gitBranch, options) {
1766
2226
  const databaseURL = options?.databaseURL || getDatabaseURL();
1767
2227
  const apiKey = options?.apiKey || getAPIKey();
1768
2228
  if (!databaseURL)
1769
- throw new Error("A databaseURL was not defined. Either set the XATA_DATABASE_URL env variable or pass the argument explicitely");
2229
+ throw new Error(
2230
+ "A databaseURL was not defined. Either set the XATA_DATABASE_URL env variable or pass the argument explicitely"
2231
+ );
1770
2232
  if (!apiKey)
1771
- throw new Error("An API key was not defined. Either set the XATA_API_KEY env variable or pass the argument explicitely");
2233
+ throw new Error(
2234
+ "An API key was not defined. Either set the XATA_API_KEY env variable or pass the argument explicitely"
2235
+ );
1772
2236
  const [protocol, , host, , dbName] = databaseURL.split("/");
1773
2237
  const [workspace] = host.split(".");
2238
+ const { fallbackBranch } = getEnvironment();
1774
2239
  const { branch } = await resolveBranch({
1775
2240
  apiKey,
1776
2241
  apiUrl: databaseURL,
1777
2242
  fetchImpl: getFetchImplementation(options?.fetchImpl),
1778
2243
  workspacesApiUrl: `${protocol}//${host}`,
1779
2244
  pathParams: { dbName, workspace },
1780
- queryParams: { gitBranch, fallbackBranch: getEnvVariable("XATA_FALLBACK_BRANCH") }
2245
+ queryParams: { gitBranch, fallbackBranch },
2246
+ trace: defaultTrace
1781
2247
  });
1782
2248
  return branch;
1783
2249
  }
@@ -1785,9 +2251,13 @@ async function getDatabaseBranch(branch, options) {
1785
2251
  const databaseURL = options?.databaseURL || getDatabaseURL();
1786
2252
  const apiKey = options?.apiKey || getAPIKey();
1787
2253
  if (!databaseURL)
1788
- throw new Error("A databaseURL was not defined. Either set the XATA_DATABASE_URL env variable or pass the argument explicitely");
2254
+ throw new Error(
2255
+ "A databaseURL was not defined. Either set the XATA_DATABASE_URL env variable or pass the argument explicitely"
2256
+ );
1789
2257
  if (!apiKey)
1790
- throw new Error("An API key was not defined. Either set the XATA_API_KEY env variable or pass the argument explicitely");
2258
+ throw new Error(
2259
+ "An API key was not defined. Either set the XATA_API_KEY env variable or pass the argument explicitely"
2260
+ );
1791
2261
  const [protocol, , host, , database] = databaseURL.split("/");
1792
2262
  const [workspace] = host.split(".");
1793
2263
  const dbBranchName = `${database}:${branch}`;
@@ -1797,10 +2267,8 @@ async function getDatabaseBranch(branch, options) {
1797
2267
  apiUrl: databaseURL,
1798
2268
  fetchImpl: getFetchImplementation(options?.fetchImpl),
1799
2269
  workspacesApiUrl: `${protocol}//${host}`,
1800
- pathParams: {
1801
- dbBranchName,
1802
- workspace
1803
- }
2270
+ pathParams: { dbBranchName, workspace },
2271
+ trace: defaultTrace
1804
2272
  });
1805
2273
  } catch (err) {
1806
2274
  if (isObject(err) && err.status === 404)
@@ -1808,21 +2276,10 @@ async function getDatabaseBranch(branch, options) {
1808
2276
  throw err;
1809
2277
  }
1810
2278
  }
1811
- function getBranchByEnvVariable() {
1812
- for (const name of envBranchNames) {
1813
- const value = getEnvVariable(name);
1814
- if (value) {
1815
- return value;
1816
- }
1817
- }
1818
- try {
1819
- return XATA_BRANCH;
1820
- } catch (err) {
1821
- }
1822
- }
1823
2279
  function getDatabaseURL() {
1824
2280
  try {
1825
- return getEnvVariable("XATA_DATABASE_URL") ?? XATA_DATABASE_URL;
2281
+ const { databaseURL } = getEnvironment();
2282
+ return databaseURL;
1826
2283
  } catch (err) {
1827
2284
  return void 0;
1828
2285
  }
@@ -1851,20 +2308,23 @@ var __privateMethod = (obj, member, method) => {
1851
2308
  return method;
1852
2309
  };
1853
2310
  const buildClient = (plugins) => {
1854
- var _branch, _parseOptions, parseOptions_fn, _getFetchProps, getFetchProps_fn, _evaluateBranch, evaluateBranch_fn, _a;
2311
+ var _branch, _options, _parseOptions, parseOptions_fn, _getFetchProps, getFetchProps_fn, _evaluateBranch, evaluateBranch_fn, _a;
1855
2312
  return _a = class {
1856
- constructor(options = {}, tables) {
2313
+ constructor(options = {}, schemaTables) {
1857
2314
  __privateAdd(this, _parseOptions);
1858
2315
  __privateAdd(this, _getFetchProps);
1859
2316
  __privateAdd(this, _evaluateBranch);
1860
2317
  __privateAdd(this, _branch, void 0);
2318
+ __privateAdd(this, _options, void 0);
1861
2319
  const safeOptions = __privateMethod(this, _parseOptions, parseOptions_fn).call(this, options);
2320
+ __privateSet(this, _options, safeOptions);
1862
2321
  const pluginOptions = {
1863
2322
  getFetchProps: () => __privateMethod(this, _getFetchProps, getFetchProps_fn).call(this, safeOptions),
1864
- cache: safeOptions.cache
2323
+ cache: safeOptions.cache,
2324
+ trace: safeOptions.trace
1865
2325
  };
1866
- const db = new SchemaPlugin(tables).build(pluginOptions);
1867
- const search = new SearchPlugin(db).build(pluginOptions);
2326
+ const db = new SchemaPlugin(schemaTables).build(pluginOptions);
2327
+ const search = new SearchPlugin(db, schemaTables).build(pluginOptions);
1868
2328
  this.db = db;
1869
2329
  this.search = search;
1870
2330
  for (const [key, namespace] of Object.entries(plugins ?? {})) {
@@ -1880,22 +2340,26 @@ const buildClient = (plugins) => {
1880
2340
  }
1881
2341
  }
1882
2342
  }
1883
- }, _branch = new WeakMap(), _parseOptions = new WeakSet(), parseOptions_fn = function(options) {
2343
+ async getConfig() {
2344
+ const databaseURL = __privateGet(this, _options).databaseURL;
2345
+ const branch = await __privateGet(this, _options).branch();
2346
+ return { databaseURL, branch };
2347
+ }
2348
+ }, _branch = new WeakMap(), _options = new WeakMap(), _parseOptions = new WeakSet(), parseOptions_fn = function(options) {
1884
2349
  const fetch = getFetchImplementation(options?.fetch);
1885
2350
  const databaseURL = options?.databaseURL || getDatabaseURL();
1886
2351
  const apiKey = options?.apiKey || getAPIKey();
1887
- const cache = options?.cache ?? new SimpleCache({ cacheRecords: false, defaultQueryTTL: 0 });
2352
+ const cache = options?.cache ?? new SimpleCache({ defaultQueryTTL: 0 });
2353
+ const trace = options?.trace ?? defaultTrace;
1888
2354
  const branch = async () => options?.branch !== void 0 ? await __privateMethod(this, _evaluateBranch, evaluateBranch_fn).call(this, options.branch) : await getCurrentBranchName({ apiKey, databaseURL, fetchImpl: options?.fetch });
1889
- if (!databaseURL || !apiKey) {
1890
- throw new Error("Options databaseURL and apiKey are required");
2355
+ if (!apiKey) {
2356
+ throw new Error("Option apiKey is required");
1891
2357
  }
1892
- return { fetch, databaseURL, apiKey, branch, cache };
1893
- }, _getFetchProps = new WeakSet(), getFetchProps_fn = async function({
1894
- fetch,
1895
- apiKey,
1896
- databaseURL,
1897
- branch
1898
- }) {
2358
+ if (!databaseURL) {
2359
+ throw new Error("Option databaseURL is required");
2360
+ }
2361
+ return { fetch, databaseURL, apiKey, branch, cache, trace };
2362
+ }, _getFetchProps = new WeakSet(), getFetchProps_fn = async function({ fetch, apiKey, databaseURL, branch, trace }) {
1899
2363
  const branchValue = await __privateMethod(this, _evaluateBranch, evaluateBranch_fn).call(this, branch);
1900
2364
  if (!branchValue)
1901
2365
  throw new Error("Unable to resolve branch value");
@@ -1905,9 +2369,10 @@ const buildClient = (plugins) => {
1905
2369
  apiUrl: "",
1906
2370
  workspacesApiUrl: (path, params) => {
1907
2371
  const hasBranch = params.dbBranchName ?? params.branch;
1908
- const newPath = path.replace(/^\/db\/[^/]+/, hasBranch ? `:${branchValue}` : "");
2372
+ const newPath = path.replace(/^\/db\/[^/]+/, hasBranch !== void 0 ? `:${branchValue}` : "");
1909
2373
  return databaseURL + newPath;
1910
- }
2374
+ },
2375
+ trace
1911
2376
  };
1912
2377
  }, _evaluateBranch = new WeakSet(), evaluateBranch_fn = async function(param) {
1913
2378
  if (__privateGet(this, _branch))
@@ -1930,6 +2395,88 @@ const buildClient = (plugins) => {
1930
2395
  class BaseClient extends buildClient() {
1931
2396
  }
1932
2397
 
2398
+ const META = "__";
2399
+ const VALUE = "___";
2400
+ class Serializer {
2401
+ constructor() {
2402
+ this.classes = {};
2403
+ }
2404
+ add(clazz) {
2405
+ this.classes[clazz.name] = clazz;
2406
+ }
2407
+ toJSON(data) {
2408
+ function visit(obj) {
2409
+ if (Array.isArray(obj))
2410
+ return obj.map(visit);
2411
+ const type = typeof obj;
2412
+ if (type === "undefined")
2413
+ return { [META]: "undefined" };
2414
+ if (type === "bigint")
2415
+ return { [META]: "bigint", [VALUE]: obj.toString() };
2416
+ if (obj === null || type !== "object")
2417
+ return obj;
2418
+ const constructor = obj.constructor;
2419
+ const o = { [META]: constructor.name };
2420
+ for (const [key, value] of Object.entries(obj)) {
2421
+ o[key] = visit(value);
2422
+ }
2423
+ if (constructor === Date)
2424
+ o[VALUE] = obj.toISOString();
2425
+ if (constructor === Map)
2426
+ o[VALUE] = Object.fromEntries(obj);
2427
+ if (constructor === Set)
2428
+ o[VALUE] = [...obj];
2429
+ return o;
2430
+ }
2431
+ return JSON.stringify(visit(data));
2432
+ }
2433
+ fromJSON(json) {
2434
+ return JSON.parse(json, (key, value) => {
2435
+ if (value && typeof value === "object" && !Array.isArray(value)) {
2436
+ const { [META]: clazz, [VALUE]: val, ...rest } = value;
2437
+ const constructor = this.classes[clazz];
2438
+ if (constructor) {
2439
+ return Object.assign(Object.create(constructor.prototype), rest);
2440
+ }
2441
+ if (clazz === "Date")
2442
+ return new Date(val);
2443
+ if (clazz === "Set")
2444
+ return new Set(val);
2445
+ if (clazz === "Map")
2446
+ return new Map(Object.entries(val));
2447
+ if (clazz === "bigint")
2448
+ return BigInt(val);
2449
+ if (clazz === "undefined")
2450
+ return void 0;
2451
+ return rest;
2452
+ }
2453
+ return value;
2454
+ });
2455
+ }
2456
+ }
2457
+ const defaultSerializer = new Serializer();
2458
+ const serialize = (data) => {
2459
+ return defaultSerializer.toJSON(data);
2460
+ };
2461
+ const deserialize = (json) => {
2462
+ return defaultSerializer.fromJSON(json);
2463
+ };
2464
+
2465
+ function buildWorkerRunner(config) {
2466
+ return function xataWorker(name, _worker) {
2467
+ return async (...args) => {
2468
+ const url = process.env.NODE_ENV === "development" ? `http://localhost:64749/${name}` : `https://dispatcher.xata.workers.dev/${config.workspace}/${config.worker}/${name}`;
2469
+ const result = await fetch(url, {
2470
+ method: "POST",
2471
+ headers: { "Content-Type": "application/json" },
2472
+ body: serialize({ args })
2473
+ });
2474
+ const text = await result.text();
2475
+ return deserialize(text);
2476
+ };
2477
+ };
2478
+ }
2479
+
1933
2480
  class XataError extends Error {
1934
2481
  constructor(message, status) {
1935
2482
  super(message);
@@ -1945,10 +2492,12 @@ exports.PAGINATION_MAX_OFFSET = PAGINATION_MAX_OFFSET;
1945
2492
  exports.PAGINATION_MAX_SIZE = PAGINATION_MAX_SIZE;
1946
2493
  exports.Page = Page;
1947
2494
  exports.Query = Query;
2495
+ exports.RecordArray = RecordArray;
1948
2496
  exports.Repository = Repository;
1949
2497
  exports.RestRepository = RestRepository;
1950
2498
  exports.SchemaPlugin = SchemaPlugin;
1951
2499
  exports.SearchPlugin = SearchPlugin;
2500
+ exports.Serializer = Serializer;
1952
2501
  exports.SimpleCache = SimpleCache;
1953
2502
  exports.XataApiClient = XataApiClient;
1954
2503
  exports.XataApiPlugin = XataApiPlugin;
@@ -1957,12 +2506,18 @@ exports.XataPlugin = XataPlugin;
1957
2506
  exports.acceptWorkspaceMemberInvite = acceptWorkspaceMemberInvite;
1958
2507
  exports.addGitBranchesEntry = addGitBranchesEntry;
1959
2508
  exports.addTableColumn = addTableColumn;
2509
+ exports.applyBranchSchemaEdit = applyBranchSchemaEdit;
1960
2510
  exports.buildClient = buildClient;
2511
+ exports.buildWorkerRunner = buildWorkerRunner;
1961
2512
  exports.bulkInsertTableRecords = bulkInsertTableRecords;
1962
2513
  exports.cancelWorkspaceMemberInvite = cancelWorkspaceMemberInvite;
2514
+ exports.compareBranchSchemas = compareBranchSchemas;
2515
+ exports.compareBranchWithUserSchema = compareBranchWithUserSchema;
2516
+ exports.compareMigrationRequest = compareMigrationRequest;
1963
2517
  exports.contains = contains;
1964
2518
  exports.createBranch = createBranch;
1965
2519
  exports.createDatabase = createDatabase;
2520
+ exports.createMigrationRequest = createMigrationRequest;
1966
2521
  exports.createTable = createTable;
1967
2522
  exports.createUserAPIKey = createUserAPIKey;
1968
2523
  exports.createWorkspace = createWorkspace;
@@ -1974,7 +2529,9 @@ exports.deleteTable = deleteTable;
1974
2529
  exports.deleteUser = deleteUser;
1975
2530
  exports.deleteUserAPIKey = deleteUserAPIKey;
1976
2531
  exports.deleteWorkspace = deleteWorkspace;
2532
+ exports.deserialize = deserialize;
1977
2533
  exports.endsWith = endsWith;
2534
+ exports.equals = equals;
1978
2535
  exports.executeBranchMigrationPlan = executeBranchMigrationPlan;
1979
2536
  exports.exists = exists;
1980
2537
  exports.ge = ge;
@@ -1984,13 +2541,17 @@ exports.getBranchList = getBranchList;
1984
2541
  exports.getBranchMetadata = getBranchMetadata;
1985
2542
  exports.getBranchMigrationHistory = getBranchMigrationHistory;
1986
2543
  exports.getBranchMigrationPlan = getBranchMigrationPlan;
2544
+ exports.getBranchSchemaHistory = getBranchSchemaHistory;
1987
2545
  exports.getBranchStats = getBranchStats;
1988
2546
  exports.getColumn = getColumn;
1989
2547
  exports.getCurrentBranchDetails = getCurrentBranchDetails;
1990
2548
  exports.getCurrentBranchName = getCurrentBranchName;
1991
2549
  exports.getDatabaseList = getDatabaseList;
2550
+ exports.getDatabaseMetadata = getDatabaseMetadata;
1992
2551
  exports.getDatabaseURL = getDatabaseURL;
1993
2552
  exports.getGitBranchesMapping = getGitBranchesMapping;
2553
+ exports.getMigrationRequest = getMigrationRequest;
2554
+ exports.getMigrationRequestIsMerged = getMigrationRequestIsMerged;
1994
2555
  exports.getRecord = getRecord;
1995
2556
  exports.getTableColumns = getTableColumns;
1996
2557
  exports.getTableSchema = getTableSchema;
@@ -1999,6 +2560,9 @@ exports.getUserAPIKeys = getUserAPIKeys;
1999
2560
  exports.getWorkspace = getWorkspace;
2000
2561
  exports.getWorkspaceMembersList = getWorkspaceMembersList;
2001
2562
  exports.getWorkspacesList = getWorkspacesList;
2563
+ exports.greaterEquals = greaterEquals;
2564
+ exports.greaterThan = greaterThan;
2565
+ exports.greaterThanEquals = greaterThanEquals;
2002
2566
  exports.gt = gt;
2003
2567
  exports.gte = gte;
2004
2568
  exports.includes = includes;
@@ -2009,15 +2573,24 @@ exports.insertRecord = insertRecord;
2009
2573
  exports.insertRecordWithID = insertRecordWithID;
2010
2574
  exports.inviteWorkspaceMember = inviteWorkspaceMember;
2011
2575
  exports.is = is;
2576
+ exports.isCursorPaginationOptions = isCursorPaginationOptions;
2012
2577
  exports.isIdentifiable = isIdentifiable;
2013
2578
  exports.isNot = isNot;
2014
2579
  exports.isXataRecord = isXataRecord;
2015
2580
  exports.le = le;
2581
+ exports.lessEquals = lessEquals;
2582
+ exports.lessThan = lessThan;
2583
+ exports.lessThanEquals = lessThanEquals;
2584
+ exports.listMigrationRequests = listMigrationRequests;
2585
+ exports.listMigrationRequestsCommits = listMigrationRequestsCommits;
2016
2586
  exports.lt = lt;
2017
2587
  exports.lte = lte;
2588
+ exports.mergeMigrationRequest = mergeMigrationRequest;
2018
2589
  exports.notExists = notExists;
2019
2590
  exports.operationsByTag = operationsByTag;
2591
+ exports.patchDatabaseMetadata = patchDatabaseMetadata;
2020
2592
  exports.pattern = pattern;
2593
+ exports.previewBranchSchemaEdit = previewBranchSchemaEdit;
2021
2594
  exports.queryTable = queryTable;
2022
2595
  exports.removeGitBranchesEntry = removeGitBranchesEntry;
2023
2596
  exports.removeWorkspaceMember = removeWorkspaceMember;
@@ -2025,14 +2598,18 @@ exports.resendWorkspaceMemberInvite = resendWorkspaceMemberInvite;
2025
2598
  exports.resolveBranch = resolveBranch;
2026
2599
  exports.searchBranch = searchBranch;
2027
2600
  exports.searchTable = searchTable;
2601
+ exports.serialize = serialize;
2028
2602
  exports.setTableSchema = setTableSchema;
2029
2603
  exports.startsWith = startsWith;
2030
2604
  exports.updateBranchMetadata = updateBranchMetadata;
2605
+ exports.updateBranchSchema = updateBranchSchema;
2031
2606
  exports.updateColumn = updateColumn;
2607
+ exports.updateMigrationRequest = updateMigrationRequest;
2032
2608
  exports.updateRecordWithID = updateRecordWithID;
2033
2609
  exports.updateTable = updateTable;
2034
2610
  exports.updateUser = updateUser;
2035
2611
  exports.updateWorkspace = updateWorkspace;
2612
+ exports.updateWorkspaceMemberInvite = updateWorkspaceMemberInvite;
2036
2613
  exports.updateWorkspaceMemberRole = updateWorkspaceMemberRole;
2037
2614
  exports.upsertRecordWithID = upsertRecordWithID;
2038
2615
  //# sourceMappingURL=index.cjs.map