@xata.io/client 0.0.0-alpha.vf7b5320 → 0.0.0-alpha.vf8b33c9

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.vf8b33c9";
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 updateDatabaseMetadata = (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 });
@@ -370,6 +542,11 @@ const queryTable = (variables) => fetch$1({
370
542
  method: "post",
371
543
  ...variables
372
544
  });
545
+ const searchTable = (variables) => fetch$1({
546
+ url: "/db/{dbBranchName}/tables/{tableName}/search",
547
+ method: "post",
548
+ ...variables
549
+ });
373
550
  const searchBranch = (variables) => fetch$1({
374
551
  url: "/db/{dbBranchName}/search",
375
552
  method: "post",
@@ -387,6 +564,7 @@ const operationsByTag = {
387
564
  updateWorkspaceMemberRole,
388
565
  removeWorkspaceMember,
389
566
  inviteWorkspaceMember,
567
+ updateWorkspaceMemberInvite,
390
568
  cancelWorkspaceMemberInvite,
391
569
  resendWorkspaceMemberInvite,
392
570
  acceptWorkspaceMemberInvite
@@ -395,6 +573,8 @@ const operationsByTag = {
395
573
  getDatabaseList,
396
574
  createDatabase,
397
575
  deleteDatabase,
576
+ getDatabaseMetadata,
577
+ updateDatabaseMetadata,
398
578
  getGitBranchesMapping,
399
579
  addGitBranchesEntry,
400
580
  removeGitBranchesEntry,
@@ -407,10 +587,28 @@ const operationsByTag = {
407
587
  deleteBranch,
408
588
  updateBranchMetadata,
409
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: {
410
603
  getBranchMigrationHistory,
411
604
  executeBranchMigrationPlan,
412
605
  getBranchMigrationPlan,
413
- getBranchStats
606
+ compareBranchWithUserSchema,
607
+ compareBranchSchemas,
608
+ updateBranchSchema,
609
+ previewBranchSchemaEdit,
610
+ applyBranchSchemaEdit,
611
+ getBranchSchemaHistory
414
612
  },
415
613
  table: {
416
614
  createTable,
@@ -433,14 +631,15 @@ const operationsByTag = {
433
631
  getRecord,
434
632
  bulkInsertTableRecords,
435
633
  queryTable,
634
+ searchTable,
436
635
  searchBranch
437
636
  }
438
637
  };
439
638
 
440
639
  function getHostUrl(provider, type) {
441
- if (isValidAlias(provider)) {
640
+ if (isHostProviderAlias(provider)) {
442
641
  return providers[provider][type];
443
- } else if (isValidBuilder(provider)) {
642
+ } else if (isHostProviderBuilder(provider)) {
444
643
  return provider[type];
445
644
  }
446
645
  throw new Error("Invalid API provider");
@@ -455,10 +654,10 @@ const providers = {
455
654
  workspaces: "https://{workspaceId}.staging.xatabase.co"
456
655
  }
457
656
  };
458
- function isValidAlias(alias) {
657
+ function isHostProviderAlias(alias) {
459
658
  return isString(alias) && Object.keys(providers).includes(alias);
460
659
  }
461
- function isValidBuilder(builder) {
660
+ function isHostProviderBuilder(builder) {
462
661
  return isObject(builder) && isString(builder.main) && isString(builder.workspaces);
463
662
  }
464
663
 
@@ -475,7 +674,7 @@ var __privateAdd$7 = (obj, member, value) => {
475
674
  throw TypeError("Cannot add the same private member more than once");
476
675
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
477
676
  };
478
- var __privateSet$6 = (obj, member, value, setter) => {
677
+ var __privateSet$7 = (obj, member, value, setter) => {
479
678
  __accessCheck$7(obj, member, "write to private field");
480
679
  setter ? setter.call(obj, value) : member.set(obj, value);
481
680
  return value;
@@ -486,15 +685,17 @@ class XataApiClient {
486
685
  __privateAdd$7(this, _extraProps, void 0);
487
686
  __privateAdd$7(this, _namespaces, {});
488
687
  const provider = options.host ?? "production";
489
- const apiKey = options?.apiKey ?? getAPIKey();
688
+ const apiKey = options.apiKey ?? getAPIKey();
689
+ const trace = options.trace ?? defaultTrace;
490
690
  if (!apiKey) {
491
691
  throw new Error("Could not resolve a valid apiKey");
492
692
  }
493
- __privateSet$6(this, _extraProps, {
693
+ __privateSet$7(this, _extraProps, {
494
694
  apiUrl: getHostUrl(provider, "main"),
495
695
  workspacesApiUrl: getHostUrl(provider, "workspaces"),
496
696
  fetchImpl: getFetchImplementation(options.fetch),
497
- apiKey
697
+ apiKey,
698
+ trace
498
699
  });
499
700
  }
500
701
  get user() {
@@ -527,6 +728,16 @@ class XataApiClient {
527
728
  __privateGet$7(this, _namespaces).records = new RecordsApi(__privateGet$7(this, _extraProps));
528
729
  return __privateGet$7(this, _namespaces).records;
529
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
+ }
530
741
  }
531
742
  _extraProps = new WeakMap();
532
743
  _namespaces = new WeakMap();
@@ -617,6 +828,13 @@ class WorkspaceApi {
617
828
  ...this.extraProps
618
829
  });
619
830
  }
831
+ updateWorkspaceMemberInvite(workspaceId, inviteId, role) {
832
+ return operationsByTag.workspaces.updateWorkspaceMemberInvite({
833
+ pathParams: { workspaceId, inviteId },
834
+ body: { role },
835
+ ...this.extraProps
836
+ });
837
+ }
620
838
  cancelWorkspaceMemberInvite(workspaceId, inviteId) {
621
839
  return operationsByTag.workspaces.cancelWorkspaceMemberInvite({
622
840
  pathParams: { workspaceId, inviteId },
@@ -659,6 +877,19 @@ class DatabaseApi {
659
877
  ...this.extraProps
660
878
  });
661
879
  }
880
+ getDatabaseMetadata(workspace, dbName) {
881
+ return operationsByTag.database.getDatabaseMetadata({
882
+ pathParams: { workspace, dbName },
883
+ ...this.extraProps
884
+ });
885
+ }
886
+ updateDatabaseMetadata(workspace, dbName, options = {}) {
887
+ return operationsByTag.database.updateDatabaseMetadata({
888
+ pathParams: { workspace, dbName },
889
+ body: options,
890
+ ...this.extraProps
891
+ });
892
+ }
662
893
  getGitBranchesMapping(workspace, dbName) {
663
894
  return operationsByTag.database.getGitBranchesMapping({
664
895
  pathParams: { workspace, dbName },
@@ -679,10 +910,10 @@ class DatabaseApi {
679
910
  ...this.extraProps
680
911
  });
681
912
  }
682
- resolveBranch(workspace, dbName, gitBranch) {
913
+ resolveBranch(workspace, dbName, gitBranch, fallbackBranch) {
683
914
  return operationsByTag.database.resolveBranch({
684
915
  pathParams: { workspace, dbName },
685
- queryParams: { gitBranch },
916
+ queryParams: { gitBranch, fallbackBranch },
686
917
  ...this.extraProps
687
918
  });
688
919
  }
@@ -703,10 +934,10 @@ class BranchApi {
703
934
  ...this.extraProps
704
935
  });
705
936
  }
706
- createBranch(workspace, database, branch, from = "", options = {}) {
937
+ createBranch(workspace, database, branch, from, options = {}) {
707
938
  return operationsByTag.branch.createBranch({
708
939
  pathParams: { workspace, dbBranchName: `${database}:${branch}` },
709
- queryParams: { from },
940
+ queryParams: isString(from) ? { from } : void 0,
710
941
  body: options,
711
942
  ...this.extraProps
712
943
  });
@@ -730,27 +961,6 @@ class BranchApi {
730
961
  ...this.extraProps
731
962
  });
732
963
  }
733
- getBranchMigrationHistory(workspace, database, branch, options = {}) {
734
- return operationsByTag.branch.getBranchMigrationHistory({
735
- pathParams: { workspace, dbBranchName: `${database}:${branch}` },
736
- body: options,
737
- ...this.extraProps
738
- });
739
- }
740
- executeBranchMigrationPlan(workspace, database, branch, migrationPlan) {
741
- return operationsByTag.branch.executeBranchMigrationPlan({
742
- pathParams: { workspace, dbBranchName: `${database}:${branch}` },
743
- body: migrationPlan,
744
- ...this.extraProps
745
- });
746
- }
747
- getBranchMigrationPlan(workspace, database, branch, schema) {
748
- return operationsByTag.branch.getBranchMigrationPlan({
749
- pathParams: { workspace, dbBranchName: `${database}:${branch}` },
750
- body: schema,
751
- ...this.extraProps
752
- });
753
- }
754
964
  getBranchStats(workspace, database, branch) {
755
965
  return operationsByTag.branch.getBranchStats({
756
966
  pathParams: { workspace, dbBranchName: `${database}:${branch}` },
@@ -831,9 +1041,10 @@ class RecordsApi {
831
1041
  constructor(extraProps) {
832
1042
  this.extraProps = extraProps;
833
1043
  }
834
- insertRecord(workspace, database, branch, tableName, record) {
1044
+ insertRecord(workspace, database, branch, tableName, record, options = {}) {
835
1045
  return operationsByTag.records.insertRecord({
836
1046
  pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },
1047
+ queryParams: options,
837
1048
  body: record,
838
1049
  ...this.extraProps
839
1050
  });
@@ -862,21 +1073,24 @@ class RecordsApi {
862
1073
  ...this.extraProps
863
1074
  });
864
1075
  }
865
- deleteRecord(workspace, database, branch, tableName, recordId) {
1076
+ deleteRecord(workspace, database, branch, tableName, recordId, options = {}) {
866
1077
  return operationsByTag.records.deleteRecord({
867
1078
  pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, recordId },
1079
+ queryParams: options,
868
1080
  ...this.extraProps
869
1081
  });
870
1082
  }
871
1083
  getRecord(workspace, database, branch, tableName, recordId, options = {}) {
872
1084
  return operationsByTag.records.getRecord({
873
1085
  pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName, recordId },
1086
+ queryParams: options,
874
1087
  ...this.extraProps
875
1088
  });
876
1089
  }
877
- bulkInsertTableRecords(workspace, database, branch, tableName, records) {
1090
+ bulkInsertTableRecords(workspace, database, branch, tableName, records, options = {}) {
878
1091
  return operationsByTag.records.bulkInsertTableRecords({
879
1092
  pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },
1093
+ queryParams: options,
880
1094
  body: { records },
881
1095
  ...this.extraProps
882
1096
  });
@@ -888,6 +1102,13 @@ class RecordsApi {
888
1102
  ...this.extraProps
889
1103
  });
890
1104
  }
1105
+ searchTable(workspace, database, branch, tableName, query) {
1106
+ return operationsByTag.records.searchTable({
1107
+ pathParams: { workspace, dbBranchName: `${database}:${branch}`, tableName },
1108
+ body: query,
1109
+ ...this.extraProps
1110
+ });
1111
+ }
891
1112
  searchBranch(workspace, database, branch, query) {
892
1113
  return operationsByTag.records.searchBranch({
893
1114
  pathParams: { workspace, dbBranchName: `${database}:${branch}` },
@@ -896,6 +1117,131 @@ class RecordsApi {
896
1117
  });
897
1118
  }
898
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
+ }
899
1245
 
900
1246
  class XataApiPlugin {
901
1247
  async build(options) {
@@ -920,18 +1266,18 @@ var __privateAdd$6 = (obj, member, value) => {
920
1266
  throw TypeError("Cannot add the same private member more than once");
921
1267
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
922
1268
  };
923
- var __privateSet$5 = (obj, member, value, setter) => {
1269
+ var __privateSet$6 = (obj, member, value, setter) => {
924
1270
  __accessCheck$6(obj, member, "write to private field");
925
1271
  setter ? setter.call(obj, value) : member.set(obj, value);
926
1272
  return value;
927
1273
  };
928
- var _query;
1274
+ var _query, _page;
929
1275
  class Page {
930
1276
  constructor(query, meta, records = []) {
931
1277
  __privateAdd$6(this, _query, void 0);
932
- __privateSet$5(this, _query, query);
1278
+ __privateSet$6(this, _query, query);
933
1279
  this.meta = meta;
934
- this.records = records;
1280
+ this.records = new RecordArray(this, records);
935
1281
  }
936
1282
  async nextPage(size, offset) {
937
1283
  return __privateGet$6(this, _query).getPaginated({ pagination: { size, offset, after: this.meta.page.cursor } });
@@ -951,9 +1297,56 @@ class Page {
951
1297
  }
952
1298
  _query = new WeakMap();
953
1299
  const PAGINATION_MAX_SIZE = 200;
954
- const PAGINATION_DEFAULT_SIZE = 200;
1300
+ const PAGINATION_DEFAULT_SIZE = 20;
955
1301
  const PAGINATION_MAX_OFFSET = 800;
956
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();
957
1350
 
958
1351
  var __accessCheck$5 = (obj, member, msg) => {
959
1352
  if (!member.has(obj))
@@ -968,25 +1361,26 @@ var __privateAdd$5 = (obj, member, value) => {
968
1361
  throw TypeError("Cannot add the same private member more than once");
969
1362
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
970
1363
  };
971
- var __privateSet$4 = (obj, member, value, setter) => {
1364
+ var __privateSet$5 = (obj, member, value, setter) => {
972
1365
  __accessCheck$5(obj, member, "write to private field");
973
1366
  setter ? setter.call(obj, value) : member.set(obj, value);
974
1367
  return value;
975
1368
  };
976
1369
  var _table$1, _repository, _data;
977
1370
  const _Query = class {
978
- constructor(repository, table, data, parent) {
1371
+ constructor(repository, table, data, rawParent) {
979
1372
  __privateAdd$5(this, _table$1, void 0);
980
1373
  __privateAdd$5(this, _repository, void 0);
981
1374
  __privateAdd$5(this, _data, { filter: {} });
982
1375
  this.meta = { page: { cursor: "start", more: true } };
983
- this.records = [];
984
- __privateSet$4(this, _table$1, table);
1376
+ this.records = new RecordArray(this, []);
1377
+ __privateSet$5(this, _table$1, table);
985
1378
  if (repository) {
986
- __privateSet$4(this, _repository, repository);
1379
+ __privateSet$5(this, _repository, repository);
987
1380
  } else {
988
- __privateSet$4(this, _repository, this);
1381
+ __privateSet$5(this, _repository, this);
989
1382
  }
1383
+ const parent = cleanParent(data, rawParent);
990
1384
  __privateGet$5(this, _data).filter = data.filter ?? parent?.filter ?? {};
991
1385
  __privateGet$5(this, _data).filter.$any = data.filter?.$any ?? parent?.filter?.$any;
992
1386
  __privateGet$5(this, _data).filter.$all = data.filter?.$all ?? parent?.filter?.$all;
@@ -1031,55 +1425,88 @@ const _Query = class {
1031
1425
  }
1032
1426
  filter(a, b) {
1033
1427
  if (arguments.length === 1) {
1034
- const constraints = Object.entries(a).map(([column, constraint]) => ({ [column]: constraint }));
1428
+ const constraints = Object.entries(a ?? {}).map(([column, constraint]) => ({ [column]: constraint }));
1035
1429
  const $all = compact([__privateGet$5(this, _data).filter?.$all].flat().concat(constraints));
1036
1430
  return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { filter: { $all } }, __privateGet$5(this, _data));
1037
1431
  } else {
1038
- 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));
1039
1434
  return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { filter: { $all } }, __privateGet$5(this, _data));
1040
1435
  }
1041
1436
  }
1042
- 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") {
1043
1445
  const originalSort = [__privateGet$5(this, _data).sort ?? []].flat();
1044
1446
  const sort = [...originalSort, { column, direction }];
1045
1447
  return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { sort }, __privateGet$5(this, _data));
1046
1448
  }
1047
1449
  select(columns) {
1048
- 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
+ );
1049
1456
  }
1050
1457
  getPaginated(options = {}) {
1051
1458
  const query = new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), options, __privateGet$5(this, _data));
1052
1459
  return __privateGet$5(this, _repository).query(query);
1053
1460
  }
1054
1461
  async *[Symbol.asyncIterator]() {
1055
- for await (const [record] of this.getIterator(1)) {
1462
+ for await (const [record] of this.getIterator({ batchSize: 1 })) {
1056
1463
  yield record;
1057
1464
  }
1058
1465
  }
1059
- async *getIterator(chunk, options = {}) {
1060
- let offset = 0;
1061
- let end = false;
1062
- while (!end) {
1063
- const { records, meta } = await this.getPaginated({ ...options, pagination: { size: chunk, offset } });
1064
- yield records;
1065
- offset += chunk;
1066
- end = !meta.page.more;
1466
+ async *getIterator(options = {}) {
1467
+ const { batchSize = 1 } = options;
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;
1067
1475
  }
1068
1476
  }
1069
1477
  async getMany(options = {}) {
1070
- const { records } = await this.getPaginated(options);
1071
- return records;
1478
+ const { pagination = {}, ...rest } = options;
1479
+ const { size = PAGINATION_DEFAULT_SIZE, offset } = pagination;
1480
+ const batchSize = size <= PAGINATION_MAX_SIZE ? size : PAGINATION_MAX_SIZE;
1481
+ let page = await this.getPaginated({ ...rest, pagination: { size: batchSize, offset } });
1482
+ const results = [...page.records];
1483
+ while (page.hasNextPage() && results.length < size) {
1484
+ page = await page.nextPage();
1485
+ results.push(...page.records);
1486
+ }
1487
+ if (page.hasNextPage() && options.pagination?.size === void 0) {
1488
+ console.trace("Calling getMany does not return all results. Paginate to get all results or call getAll.");
1489
+ }
1490
+ const array = new RecordArray(page, results.slice(0, size));
1491
+ return array;
1072
1492
  }
1073
- async getAll(chunk = PAGINATION_MAX_SIZE, options = {}) {
1493
+ async getAll(options = {}) {
1494
+ const { batchSize = PAGINATION_MAX_SIZE, ...rest } = options;
1074
1495
  const results = [];
1075
- for await (const page of this.getIterator(chunk, options)) {
1496
+ for await (const page of this.getIterator({ ...rest, batchSize })) {
1076
1497
  results.push(...page);
1077
1498
  }
1078
1499
  return results;
1079
1500
  }
1080
1501
  async getFirst(options = {}) {
1081
1502
  const records = await this.getMany({ ...options, pagination: { size: 1 } });
1082
- return records[0] || null;
1503
+ return records[0] ?? null;
1504
+ }
1505
+ async getFirstOrThrow(options = {}) {
1506
+ const records = await this.getMany({ ...options, pagination: { size: 1 } });
1507
+ if (records[0] === void 0)
1508
+ throw new Error("No results found.");
1509
+ return records[0];
1083
1510
  }
1084
1511
  cache(ttl) {
1085
1512
  return new _Query(__privateGet$5(this, _repository), __privateGet$5(this, _table$1), { cache: ttl }, __privateGet$5(this, _data));
@@ -1104,12 +1531,20 @@ let Query = _Query;
1104
1531
  _table$1 = new WeakMap();
1105
1532
  _repository = new WeakMap();
1106
1533
  _data = new WeakMap();
1534
+ function cleanParent(data, parent) {
1535
+ if (isCursorPaginationOptions(data.pagination)) {
1536
+ return { ...parent, sorting: void 0, filter: void 0 };
1537
+ }
1538
+ return parent;
1539
+ }
1107
1540
 
1108
1541
  function isIdentifiable(x) {
1109
1542
  return isObject(x) && isString(x?.id);
1110
1543
  }
1111
1544
  function isXataRecord(x) {
1112
- return isIdentifiable(x) && typeof x?.xata === "object" && typeof x?.xata?.version === "number";
1545
+ const record = x;
1546
+ const metadata = record?.getMetadata();
1547
+ return isIdentifiable(x) && isObject(metadata) && typeof metadata.version === "number";
1113
1548
  }
1114
1549
 
1115
1550
  function isSortFilterString(value) {
@@ -1148,7 +1583,7 @@ var __privateAdd$4 = (obj, member, value) => {
1148
1583
  throw TypeError("Cannot add the same private member more than once");
1149
1584
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
1150
1585
  };
1151
- var __privateSet$3 = (obj, member, value, setter) => {
1586
+ var __privateSet$4 = (obj, member, value, setter) => {
1152
1587
  __accessCheck$4(obj, member, "write to private field");
1153
1588
  setter ? setter.call(obj, value) : member.set(obj, value);
1154
1589
  return value;
@@ -1157,180 +1592,284 @@ var __privateMethod$2 = (obj, member, method) => {
1157
1592
  __accessCheck$4(obj, member, "access private method");
1158
1593
  return method;
1159
1594
  };
1160
- 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;
1595
+ var _table, _getFetchProps, _db, _cache, _schemaTables$2, _trace, _insertRecordWithoutId, insertRecordWithoutId_fn, _insertRecordWithId, insertRecordWithId_fn, _bulkInsertTableRecords, bulkInsertTableRecords_fn, _updateRecordWithID, updateRecordWithID_fn, _upsertRecordWithID, upsertRecordWithID_fn, _deleteRecord, deleteRecord_fn, _setCacheQuery, setCacheQuery_fn, _getCacheQuery, getCacheQuery_fn, _getSchemaTables$1, getSchemaTables_fn$1;
1161
1596
  class Repository extends Query {
1162
1597
  }
1163
1598
  class RestRepository extends Query {
1164
1599
  constructor(options) {
1165
- super(null, options.table, {});
1600
+ super(
1601
+ null,
1602
+ { name: options.table, schema: options.schemaTables?.find((table) => table.name === options.table) },
1603
+ {}
1604
+ );
1166
1605
  __privateAdd$4(this, _insertRecordWithoutId);
1167
1606
  __privateAdd$4(this, _insertRecordWithId);
1168
1607
  __privateAdd$4(this, _bulkInsertTableRecords);
1169
1608
  __privateAdd$4(this, _updateRecordWithID);
1170
1609
  __privateAdd$4(this, _upsertRecordWithID);
1171
1610
  __privateAdd$4(this, _deleteRecord);
1172
- __privateAdd$4(this, _invalidateCache);
1173
- __privateAdd$4(this, _setCacheRecord);
1174
- __privateAdd$4(this, _getCacheRecord);
1175
1611
  __privateAdd$4(this, _setCacheQuery);
1176
1612
  __privateAdd$4(this, _getCacheQuery);
1177
- __privateAdd$4(this, _getSchema$1);
1613
+ __privateAdd$4(this, _getSchemaTables$1);
1178
1614
  __privateAdd$4(this, _table, void 0);
1179
1615
  __privateAdd$4(this, _getFetchProps, void 0);
1616
+ __privateAdd$4(this, _db, void 0);
1180
1617
  __privateAdd$4(this, _cache, void 0);
1181
- __privateAdd$4(this, _schema$1, void 0);
1182
- __privateSet$3(this, _table, options.table);
1183
- __privateSet$3(this, _getFetchProps, options.pluginOptions.getFetchProps);
1184
- this.db = options.db;
1185
- __privateSet$3(this, _cache, options.pluginOptions.cache);
1186
- }
1187
- async create(a, b) {
1188
- if (Array.isArray(a)) {
1189
- const records = await __privateMethod$2(this, _bulkInsertTableRecords, bulkInsertTableRecords_fn).call(this, a);
1190
- await Promise.all(records.map((record) => __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record)));
1191
- return records;
1192
- }
1193
- if (isString(a) && isObject(b)) {
1194
- if (a === "")
1195
- throw new Error("The id can't be empty");
1196
- const record = await __privateMethod$2(this, _insertRecordWithId, insertRecordWithId_fn).call(this, a, b);
1197
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1198
- return record;
1199
- }
1200
- if (isObject(a) && isString(a.id)) {
1201
- if (a.id === "")
1202
- throw new Error("The id can't be empty");
1203
- const record = await __privateMethod$2(this, _insertRecordWithId, insertRecordWithId_fn).call(this, a.id, { ...a, id: void 0 });
1204
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1205
- return record;
1206
- }
1207
- if (isObject(a)) {
1208
- const record = await __privateMethod$2(this, _insertRecordWithoutId, insertRecordWithoutId_fn).call(this, a);
1209
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1210
- return record;
1211
- }
1212
- throw new Error("Invalid arguments for create method");
1213
- }
1214
- async read(recordId) {
1215
- const cacheRecord = await __privateMethod$2(this, _getCacheRecord, getCacheRecord_fn).call(this, recordId);
1216
- if (cacheRecord)
1217
- return cacheRecord;
1218
- const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1219
- try {
1220
- const response = await getRecord({
1221
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table), recordId },
1222
- ...fetchProps
1618
+ __privateAdd$4(this, _schemaTables$2, void 0);
1619
+ __privateAdd$4(this, _trace, void 0);
1620
+ __privateSet$4(this, _table, options.table);
1621
+ __privateSet$4(this, _getFetchProps, options.pluginOptions.getFetchProps);
1622
+ __privateSet$4(this, _db, options.db);
1623
+ __privateSet$4(this, _cache, options.pluginOptions.cache);
1624
+ __privateSet$4(this, _schemaTables$2, options.schemaTables);
1625
+ const trace = options.pluginOptions.trace ?? defaultTrace;
1626
+ __privateSet$4(this, _trace, async (name, fn, options2 = {}) => {
1627
+ return trace(name, fn, {
1628
+ ...options2,
1629
+ [TraceAttributes.TABLE]: __privateGet$4(this, _table),
1630
+ [TraceAttributes.KIND]: "sdk-operation",
1631
+ [TraceAttributes.VERSION]: VERSION
1223
1632
  });
1224
- const schema = await __privateMethod$2(this, _getSchema$1, getSchema_fn$1).call(this);
1225
- return initObject(this.db, schema, __privateGet$4(this, _table), response);
1226
- } catch (e) {
1227
- if (isObject(e) && e.status === 404) {
1228
- return null;
1633
+ });
1634
+ }
1635
+ async create(a, b, c) {
1636
+ return __privateGet$4(this, _trace).call(this, "create", async () => {
1637
+ if (Array.isArray(a)) {
1638
+ if (a.length === 0)
1639
+ return [];
1640
+ const columns = isStringArray(b) ? b : void 0;
1641
+ return __privateMethod$2(this, _bulkInsertTableRecords, bulkInsertTableRecords_fn).call(this, a, columns);
1229
1642
  }
1230
- throw e;
1231
- }
1643
+ if (isString(a) && isObject(b)) {
1644
+ if (a === "")
1645
+ throw new Error("The id can't be empty");
1646
+ const columns = isStringArray(c) ? c : void 0;
1647
+ return __privateMethod$2(this, _insertRecordWithId, insertRecordWithId_fn).call(this, a, b, columns);
1648
+ }
1649
+ if (isObject(a) && isString(a.id)) {
1650
+ if (a.id === "")
1651
+ throw new Error("The id can't be empty");
1652
+ const columns = isStringArray(b) ? b : void 0;
1653
+ return __privateMethod$2(this, _insertRecordWithId, insertRecordWithId_fn).call(this, a.id, { ...a, id: void 0 }, columns);
1654
+ }
1655
+ if (isObject(a)) {
1656
+ const columns = isStringArray(b) ? b : void 0;
1657
+ return __privateMethod$2(this, _insertRecordWithoutId, insertRecordWithoutId_fn).call(this, a, columns);
1658
+ }
1659
+ throw new Error("Invalid arguments for create method");
1660
+ });
1232
1661
  }
1233
- async update(a, b) {
1234
- if (Array.isArray(a)) {
1235
- if (a.length > 100) {
1236
- console.warn("Bulk update operation is not optimized in the Xata API yet, this request might be slow");
1662
+ async read(a, b) {
1663
+ return __privateGet$4(this, _trace).call(this, "read", async () => {
1664
+ const columns = isStringArray(b) ? b : ["*"];
1665
+ if (Array.isArray(a)) {
1666
+ if (a.length === 0)
1667
+ return [];
1668
+ const ids = a.map((item) => extractId(item));
1669
+ const finalObjects = await this.getAll({ filter: { id: { $any: compact(ids) } }, columns });
1670
+ const dictionary = finalObjects.reduce((acc, object) => {
1671
+ acc[object.id] = object;
1672
+ return acc;
1673
+ }, {});
1674
+ return ids.map((id2) => dictionary[id2 ?? ""] ?? null);
1237
1675
  }
1238
- return Promise.all(a.map((object) => this.update(object)));
1239
- }
1240
- if (isString(a) && isObject(b)) {
1241
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a);
1242
- const record = await __privateMethod$2(this, _updateRecordWithID, updateRecordWithID_fn).call(this, a, b);
1243
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1244
- return record;
1245
- }
1246
- if (isObject(a) && isString(a.id)) {
1247
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a.id);
1248
- const record = await __privateMethod$2(this, _updateRecordWithID, updateRecordWithID_fn).call(this, a.id, { ...a, id: void 0 });
1249
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1250
- return record;
1251
- }
1252
- throw new Error("Invalid arguments for update method");
1676
+ const id = extractId(a);
1677
+ if (id) {
1678
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1679
+ try {
1680
+ const response = await getRecord({
1681
+ pathParams: {
1682
+ workspace: "{workspaceId}",
1683
+ dbBranchName: "{dbBranch}",
1684
+ tableName: __privateGet$4(this, _table),
1685
+ recordId: id
1686
+ },
1687
+ queryParams: { columns },
1688
+ ...fetchProps
1689
+ });
1690
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
1691
+ return initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), response);
1692
+ } catch (e) {
1693
+ if (isObject(e) && e.status === 404) {
1694
+ return null;
1695
+ }
1696
+ throw e;
1697
+ }
1698
+ }
1699
+ return null;
1700
+ });
1253
1701
  }
1254
- async createOrUpdate(a, b) {
1255
- if (Array.isArray(a)) {
1256
- if (a.length > 100) {
1257
- console.warn("Bulk update operation is not optimized in the Xata API yet, this request might be slow");
1702
+ async readOrThrow(a, b) {
1703
+ return __privateGet$4(this, _trace).call(this, "readOrThrow", async () => {
1704
+ const result = await this.read(a, b);
1705
+ if (Array.isArray(result)) {
1706
+ const missingIds = compact(
1707
+ a.filter((_item, index) => result[index] === null).map((item) => extractId(item))
1708
+ );
1709
+ if (missingIds.length > 0) {
1710
+ throw new Error(`Could not find records with ids: ${missingIds.join(", ")}`);
1711
+ }
1712
+ return result;
1258
1713
  }
1259
- return Promise.all(a.map((object) => this.createOrUpdate(object)));
1260
- }
1261
- if (isString(a) && isObject(b)) {
1262
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a);
1263
- const record = await __privateMethod$2(this, _upsertRecordWithID, upsertRecordWithID_fn).call(this, a, b);
1264
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1265
- return record;
1266
- }
1267
- if (isObject(a) && isString(a.id)) {
1268
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a.id);
1269
- const record = await __privateMethod$2(this, _upsertRecordWithID, upsertRecordWithID_fn).call(this, a.id, { ...a, id: void 0 });
1270
- await __privateMethod$2(this, _setCacheRecord, setCacheRecord_fn).call(this, record);
1271
- return record;
1272
- }
1273
- throw new Error("Invalid arguments for createOrUpdate method");
1714
+ if (result === null) {
1715
+ const id = extractId(a) ?? "unknown";
1716
+ throw new Error(`Record with id ${id} not found`);
1717
+ }
1718
+ return result;
1719
+ });
1274
1720
  }
1275
- async delete(a) {
1276
- if (Array.isArray(a)) {
1277
- if (a.length > 100) {
1278
- console.warn("Bulk delete operation is not optimized in the Xata API yet, this request might be slow");
1721
+ async update(a, b, c) {
1722
+ return __privateGet$4(this, _trace).call(this, "update", async () => {
1723
+ if (Array.isArray(a)) {
1724
+ if (a.length === 0)
1725
+ return [];
1726
+ if (a.length > 100) {
1727
+ console.warn("Bulk update operation is not optimized in the Xata API yet, this request might be slow");
1728
+ }
1729
+ const columns = isStringArray(b) ? b : ["*"];
1730
+ return Promise.all(a.map((object) => this.update(object, columns)));
1279
1731
  }
1280
- await Promise.all(a.map((id) => this.delete(id)));
1281
- return;
1282
- }
1283
- if (isString(a)) {
1284
- await __privateMethod$2(this, _deleteRecord, deleteRecord_fn).call(this, a);
1285
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a);
1286
- return;
1287
- }
1288
- if (isObject(a) && isString(a.id)) {
1289
- await __privateMethod$2(this, _deleteRecord, deleteRecord_fn).call(this, a.id);
1290
- await __privateMethod$2(this, _invalidateCache, invalidateCache_fn).call(this, a.id);
1291
- return;
1292
- }
1293
- throw new Error("Invalid arguments for delete method");
1732
+ if (isString(a) && isObject(b)) {
1733
+ const columns = isStringArray(c) ? c : void 0;
1734
+ return __privateMethod$2(this, _updateRecordWithID, updateRecordWithID_fn).call(this, a, b, columns);
1735
+ }
1736
+ if (isObject(a) && isString(a.id)) {
1737
+ const columns = isStringArray(b) ? b : void 0;
1738
+ return __privateMethod$2(this, _updateRecordWithID, updateRecordWithID_fn).call(this, a.id, { ...a, id: void 0 }, columns);
1739
+ }
1740
+ throw new Error("Invalid arguments for update method");
1741
+ });
1742
+ }
1743
+ async updateOrThrow(a, b, c) {
1744
+ return __privateGet$4(this, _trace).call(this, "updateOrThrow", async () => {
1745
+ const result = await this.update(a, b, c);
1746
+ if (Array.isArray(result)) {
1747
+ const missingIds = compact(
1748
+ a.filter((_item, index) => result[index] === null).map((item) => extractId(item))
1749
+ );
1750
+ if (missingIds.length > 0) {
1751
+ throw new Error(`Could not find records with ids: ${missingIds.join(", ")}`);
1752
+ }
1753
+ return result;
1754
+ }
1755
+ if (result === null) {
1756
+ const id = extractId(a) ?? "unknown";
1757
+ throw new Error(`Record with id ${id} not found`);
1758
+ }
1759
+ return result;
1760
+ });
1761
+ }
1762
+ async createOrUpdate(a, b, c) {
1763
+ return __privateGet$4(this, _trace).call(this, "createOrUpdate", async () => {
1764
+ if (Array.isArray(a)) {
1765
+ if (a.length === 0)
1766
+ return [];
1767
+ if (a.length > 100) {
1768
+ console.warn("Bulk update operation is not optimized in the Xata API yet, this request might be slow");
1769
+ }
1770
+ const columns = isStringArray(b) ? b : ["*"];
1771
+ return Promise.all(a.map((object) => this.createOrUpdate(object, columns)));
1772
+ }
1773
+ if (isString(a) && isObject(b)) {
1774
+ const columns = isStringArray(c) ? c : void 0;
1775
+ return __privateMethod$2(this, _upsertRecordWithID, upsertRecordWithID_fn).call(this, a, b, columns);
1776
+ }
1777
+ if (isObject(a) && isString(a.id)) {
1778
+ const columns = isStringArray(c) ? c : void 0;
1779
+ return __privateMethod$2(this, _upsertRecordWithID, upsertRecordWithID_fn).call(this, a.id, { ...a, id: void 0 }, columns);
1780
+ }
1781
+ throw new Error("Invalid arguments for createOrUpdate method");
1782
+ });
1783
+ }
1784
+ async delete(a, b) {
1785
+ return __privateGet$4(this, _trace).call(this, "delete", async () => {
1786
+ if (Array.isArray(a)) {
1787
+ if (a.length === 0)
1788
+ return [];
1789
+ if (a.length > 100) {
1790
+ console.warn("Bulk delete operation is not optimized in the Xata API yet, this request might be slow");
1791
+ }
1792
+ return Promise.all(a.map((id) => this.delete(id, b)));
1793
+ }
1794
+ if (isString(a)) {
1795
+ return __privateMethod$2(this, _deleteRecord, deleteRecord_fn).call(this, a, b);
1796
+ }
1797
+ if (isObject(a) && isString(a.id)) {
1798
+ return __privateMethod$2(this, _deleteRecord, deleteRecord_fn).call(this, a.id, b);
1799
+ }
1800
+ throw new Error("Invalid arguments for delete method");
1801
+ });
1802
+ }
1803
+ async deleteOrThrow(a, b) {
1804
+ return __privateGet$4(this, _trace).call(this, "deleteOrThrow", async () => {
1805
+ const result = await this.delete(a, b);
1806
+ if (Array.isArray(result)) {
1807
+ const missingIds = compact(
1808
+ a.filter((_item, index) => result[index] === null).map((item) => extractId(item))
1809
+ );
1810
+ if (missingIds.length > 0) {
1811
+ throw new Error(`Could not find records with ids: ${missingIds.join(", ")}`);
1812
+ }
1813
+ return result;
1814
+ } else if (result === null) {
1815
+ const id = extractId(a) ?? "unknown";
1816
+ throw new Error(`Record with id ${id} not found`);
1817
+ }
1818
+ return result;
1819
+ });
1294
1820
  }
1295
1821
  async search(query, options = {}) {
1296
- const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1297
- const { records } = await searchBranch({
1298
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}" },
1299
- body: { tables: [__privateGet$4(this, _table)], query, fuzziness: options.fuzziness },
1300
- ...fetchProps
1822
+ return __privateGet$4(this, _trace).call(this, "search", async () => {
1823
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1824
+ const { records } = await searchTable({
1825
+ pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table) },
1826
+ body: {
1827
+ query,
1828
+ fuzziness: options.fuzziness,
1829
+ prefix: options.prefix,
1830
+ highlight: options.highlight,
1831
+ filter: options.filter,
1832
+ boosters: options.boosters
1833
+ },
1834
+ ...fetchProps
1835
+ });
1836
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
1837
+ return records.map((item) => initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), item));
1301
1838
  });
1302
- const schema = await __privateMethod$2(this, _getSchema$1, getSchema_fn$1).call(this);
1303
- return records.map((item) => initObject(this.db, schema, __privateGet$4(this, _table), item));
1304
1839
  }
1305
1840
  async query(query) {
1306
- const cacheQuery = await __privateMethod$2(this, _getCacheQuery, getCacheQuery_fn).call(this, query);
1307
- if (cacheQuery)
1308
- return new Page(query, cacheQuery.meta, cacheQuery.records);
1309
- const data = query.getQueryOptions();
1310
- const body = {
1311
- filter: Object.values(data.filter ?? {}).some(Boolean) ? data.filter : void 0,
1312
- sort: data.sort ? buildSortFilter(data.sort) : void 0,
1313
- page: data.pagination,
1314
- columns: data.columns
1315
- };
1316
- const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1317
- const { meta, records: objects } = await queryTable({
1318
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table) },
1319
- body,
1320
- ...fetchProps
1841
+ return __privateGet$4(this, _trace).call(this, "query", async () => {
1842
+ const cacheQuery = await __privateMethod$2(this, _getCacheQuery, getCacheQuery_fn).call(this, query);
1843
+ if (cacheQuery)
1844
+ return new Page(query, cacheQuery.meta, cacheQuery.records);
1845
+ const data = query.getQueryOptions();
1846
+ const body = {
1847
+ filter: cleanFilter(data.filter),
1848
+ sort: data.sort !== void 0 ? buildSortFilter(data.sort) : void 0,
1849
+ page: data.pagination,
1850
+ columns: data.columns
1851
+ };
1852
+ const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1853
+ const { meta, records: objects } = await queryTable({
1854
+ pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table) },
1855
+ body,
1856
+ ...fetchProps
1857
+ });
1858
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
1859
+ const records = objects.map((record) => initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), record));
1860
+ await __privateMethod$2(this, _setCacheQuery, setCacheQuery_fn).call(this, query, meta, records);
1861
+ return new Page(query, meta, records);
1321
1862
  });
1322
- const schema = await __privateMethod$2(this, _getSchema$1, getSchema_fn$1).call(this);
1323
- const records = objects.map((record) => initObject(this.db, schema, __privateGet$4(this, _table), record));
1324
- await __privateMethod$2(this, _setCacheQuery, setCacheQuery_fn).call(this, query, meta, records);
1325
- return new Page(query, meta, records);
1326
1863
  }
1327
1864
  }
1328
1865
  _table = new WeakMap();
1329
1866
  _getFetchProps = new WeakMap();
1867
+ _db = new WeakMap();
1330
1868
  _cache = new WeakMap();
1331
- _schema$1 = new WeakMap();
1869
+ _schemaTables$2 = new WeakMap();
1870
+ _trace = new WeakMap();
1332
1871
  _insertRecordWithoutId = new WeakSet();
1333
- insertRecordWithoutId_fn = async function(object) {
1872
+ insertRecordWithoutId_fn = async function(object, columns = ["*"]) {
1334
1873
  const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1335
1874
  const record = transformObjectLinks(object);
1336
1875
  const response = await insertRecord({
@@ -1339,17 +1878,15 @@ insertRecordWithoutId_fn = async function(object) {
1339
1878
  dbBranchName: "{dbBranch}",
1340
1879
  tableName: __privateGet$4(this, _table)
1341
1880
  },
1881
+ queryParams: { columns },
1342
1882
  body: record,
1343
1883
  ...fetchProps
1344
1884
  });
1345
- const finalObject = await this.read(response.id);
1346
- if (!finalObject) {
1347
- throw new Error("The server failed to save the record");
1348
- }
1349
- return finalObject;
1885
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
1886
+ return initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), response);
1350
1887
  };
1351
1888
  _insertRecordWithId = new WeakSet();
1352
- insertRecordWithId_fn = async function(recordId, object) {
1889
+ insertRecordWithId_fn = async function(recordId, object, columns = ["*"]) {
1353
1890
  const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1354
1891
  const record = transformObjectLinks(object);
1355
1892
  const response = await insertRecordWithID({
@@ -1360,88 +1897,78 @@ insertRecordWithId_fn = async function(recordId, object) {
1360
1897
  recordId
1361
1898
  },
1362
1899
  body: record,
1363
- queryParams: { createOnly: true },
1900
+ queryParams: { createOnly: true, columns },
1364
1901
  ...fetchProps
1365
1902
  });
1366
- const finalObject = await this.read(response.id);
1367
- if (!finalObject) {
1368
- throw new Error("The server failed to save the record");
1369
- }
1370
- return finalObject;
1903
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
1904
+ return initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), response);
1371
1905
  };
1372
1906
  _bulkInsertTableRecords = new WeakSet();
1373
- bulkInsertTableRecords_fn = async function(objects) {
1907
+ bulkInsertTableRecords_fn = async function(objects, columns = ["*"]) {
1374
1908
  const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1375
1909
  const records = objects.map((object) => transformObjectLinks(object));
1376
1910
  const response = await bulkInsertTableRecords({
1377
1911
  pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table) },
1912
+ queryParams: { columns },
1378
1913
  body: { records },
1379
1914
  ...fetchProps
1380
1915
  });
1381
- const finalObjects = await this.any(...response.recordIDs.map((id) => this.filter("id", id))).getAll();
1382
- if (finalObjects.length !== objects.length) {
1383
- throw new Error("The server failed to save some records");
1916
+ if (!isResponseWithRecords(response)) {
1917
+ throw new Error("Request included columns but server didn't include them");
1384
1918
  }
1385
- return finalObjects;
1919
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
1920
+ return response.records?.map((item) => initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), item));
1386
1921
  };
1387
1922
  _updateRecordWithID = new WeakSet();
1388
- updateRecordWithID_fn = async function(recordId, object) {
1923
+ updateRecordWithID_fn = async function(recordId, object, columns = ["*"]) {
1389
1924
  const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1390
1925
  const record = transformObjectLinks(object);
1391
- const response = await updateRecordWithID({
1392
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table), recordId },
1393
- body: record,
1394
- ...fetchProps
1395
- });
1396
- const item = await this.read(response.id);
1397
- if (!item)
1398
- throw new Error("The server failed to save the record");
1399
- return item;
1926
+ try {
1927
+ const response = await updateRecordWithID({
1928
+ pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table), recordId },
1929
+ queryParams: { columns },
1930
+ body: record,
1931
+ ...fetchProps
1932
+ });
1933
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
1934
+ return initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), response);
1935
+ } catch (e) {
1936
+ if (isObject(e) && e.status === 404) {
1937
+ return null;
1938
+ }
1939
+ throw e;
1940
+ }
1400
1941
  };
1401
1942
  _upsertRecordWithID = new WeakSet();
1402
- upsertRecordWithID_fn = async function(recordId, object) {
1943
+ upsertRecordWithID_fn = async function(recordId, object, columns = ["*"]) {
1403
1944
  const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1404
1945
  const response = await upsertRecordWithID({
1405
1946
  pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table), recordId },
1947
+ queryParams: { columns },
1406
1948
  body: object,
1407
1949
  ...fetchProps
1408
1950
  });
1409
- const item = await this.read(response.id);
1410
- if (!item)
1411
- throw new Error("The server failed to save the record");
1412
- return item;
1951
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
1952
+ return initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), response);
1413
1953
  };
1414
1954
  _deleteRecord = new WeakSet();
1415
- deleteRecord_fn = async function(recordId) {
1955
+ deleteRecord_fn = async function(recordId, columns = ["*"]) {
1416
1956
  const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1417
- await deleteRecord({
1418
- pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table), recordId },
1419
- ...fetchProps
1420
- });
1421
- };
1422
- _invalidateCache = new WeakSet();
1423
- invalidateCache_fn = async function(recordId) {
1424
- await __privateGet$4(this, _cache).delete(`rec_${__privateGet$4(this, _table)}:${recordId}`);
1425
- const cacheItems = await __privateGet$4(this, _cache).getAll();
1426
- const queries = Object.entries(cacheItems).filter(([key]) => key.startsWith("query_"));
1427
- for (const [key, value] of queries) {
1428
- const ids = getIds(value);
1429
- if (ids.includes(recordId))
1430
- await __privateGet$4(this, _cache).delete(key);
1957
+ try {
1958
+ const response = await deleteRecord({
1959
+ pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}", tableName: __privateGet$4(this, _table), recordId },
1960
+ queryParams: { columns },
1961
+ ...fetchProps
1962
+ });
1963
+ const schemaTables = await __privateMethod$2(this, _getSchemaTables$1, getSchemaTables_fn$1).call(this);
1964
+ return initObject(__privateGet$4(this, _db), schemaTables, __privateGet$4(this, _table), response);
1965
+ } catch (e) {
1966
+ if (isObject(e) && e.status === 404) {
1967
+ return null;
1968
+ }
1969
+ throw e;
1431
1970
  }
1432
1971
  };
1433
- _setCacheRecord = new WeakSet();
1434
- setCacheRecord_fn = async function(record) {
1435
- if (!__privateGet$4(this, _cache).cacheRecords)
1436
- return;
1437
- await __privateGet$4(this, _cache).set(`rec_${__privateGet$4(this, _table)}:${record.id}`, record);
1438
- };
1439
- _getCacheRecord = new WeakSet();
1440
- getCacheRecord_fn = async function(recordId) {
1441
- if (!__privateGet$4(this, _cache).cacheRecords)
1442
- return null;
1443
- return __privateGet$4(this, _cache).get(`rec_${__privateGet$4(this, _table)}:${recordId}`);
1444
- };
1445
1972
  _setCacheQuery = new WeakSet();
1446
1973
  setCacheQuery_fn = async function(query, meta, records) {
1447
1974
  await __privateGet$4(this, _cache).set(`query_${__privateGet$4(this, _table)}:${query.key()}`, { date: new Date(), meta, records });
@@ -1453,22 +1980,22 @@ getCacheQuery_fn = async function(query) {
1453
1980
  if (!result)
1454
1981
  return null;
1455
1982
  const { cache: ttl = __privateGet$4(this, _cache).defaultQueryTTL } = query.getQueryOptions();
1456
- if (!ttl || ttl < 0)
1457
- return result;
1983
+ if (ttl < 0)
1984
+ return null;
1458
1985
  const hasExpired = result.date.getTime() + ttl < Date.now();
1459
1986
  return hasExpired ? null : result;
1460
1987
  };
1461
- _getSchema$1 = new WeakSet();
1462
- getSchema_fn$1 = async function() {
1463
- if (__privateGet$4(this, _schema$1))
1464
- return __privateGet$4(this, _schema$1);
1988
+ _getSchemaTables$1 = new WeakSet();
1989
+ getSchemaTables_fn$1 = async function() {
1990
+ if (__privateGet$4(this, _schemaTables$2))
1991
+ return __privateGet$4(this, _schemaTables$2);
1465
1992
  const fetchProps = await __privateGet$4(this, _getFetchProps).call(this);
1466
1993
  const { schema } = await getBranchDetails({
1467
1994
  pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}" },
1468
1995
  ...fetchProps
1469
1996
  });
1470
- __privateSet$3(this, _schema$1, schema);
1471
- return schema;
1997
+ __privateSet$4(this, _schemaTables$2, schema.tables);
1998
+ return schema.tables;
1472
1999
  };
1473
2000
  const transformObjectLinks = (object) => {
1474
2001
  return Object.entries(object).reduce((acc, [key, value]) => {
@@ -1477,20 +2004,21 @@ const transformObjectLinks = (object) => {
1477
2004
  return { ...acc, [key]: isIdentifiable(value) ? value.id : value };
1478
2005
  }, {});
1479
2006
  };
1480
- const initObject = (db, schema, table, object) => {
2007
+ const initObject = (db, schemaTables, table, object) => {
1481
2008
  const result = {};
1482
- Object.assign(result, object);
1483
- const { columns } = schema.tables.find(({ name }) => name === table) ?? {};
2009
+ const { xata, ...rest } = object ?? {};
2010
+ Object.assign(result, rest);
2011
+ const { columns } = schemaTables.find(({ name }) => name === table) ?? {};
1484
2012
  if (!columns)
1485
2013
  console.error(`Table ${table} not found in schema`);
1486
2014
  for (const column of columns ?? []) {
1487
2015
  const value = result[column.name];
1488
2016
  switch (column.type) {
1489
2017
  case "datetime": {
1490
- const date = new Date(value);
1491
- if (isNaN(date.getTime())) {
2018
+ const date = value !== void 0 ? new Date(value) : void 0;
2019
+ if (date && isNaN(date.getTime())) {
1492
2020
  console.error(`Failed to parse date ${value} for field ${column.name}`);
1493
- } else {
2021
+ } else if (date) {
1494
2022
  result[column.name] = date;
1495
2023
  }
1496
2024
  break;
@@ -1499,36 +2027,54 @@ const initObject = (db, schema, table, object) => {
1499
2027
  const linkTable = column.link?.table;
1500
2028
  if (!linkTable) {
1501
2029
  console.error(`Failed to parse link for field ${column.name}`);
1502
- } else if (value && isObject(value)) {
1503
- result[column.name] = initObject(db, schema, linkTable, value);
2030
+ } else if (isObject(value)) {
2031
+ result[column.name] = initObject(db, schemaTables, linkTable, value);
2032
+ } else {
2033
+ result[column.name] = null;
1504
2034
  }
1505
2035
  break;
1506
2036
  }
2037
+ default:
2038
+ result[column.name] = value ?? null;
2039
+ if (column.notNull === true && value === null) {
2040
+ console.error(`Parse error, column ${column.name} is non nullable and value resolves null`);
2041
+ }
2042
+ break;
1507
2043
  }
1508
2044
  }
1509
- result.read = function() {
1510
- return db[table].read(result["id"]);
2045
+ result.read = function(columns2) {
2046
+ return db[table].read(result["id"], columns2);
1511
2047
  };
1512
- result.update = function(data) {
1513
- return db[table].update(result["id"], data);
2048
+ result.update = function(data, columns2) {
2049
+ return db[table].update(result["id"], data, columns2);
1514
2050
  };
1515
2051
  result.delete = function() {
1516
2052
  return db[table].delete(result["id"]);
1517
2053
  };
1518
- for (const prop of ["read", "update", "delete"]) {
2054
+ result.getMetadata = function() {
2055
+ return xata;
2056
+ };
2057
+ for (const prop of ["read", "update", "delete", "getMetadata"]) {
1519
2058
  Object.defineProperty(result, prop, { enumerable: false });
1520
2059
  }
1521
2060
  Object.freeze(result);
1522
2061
  return result;
1523
2062
  };
1524
- function getIds(value) {
1525
- if (Array.isArray(value)) {
1526
- return value.map((item) => getIds(item)).flat();
1527
- }
1528
- if (!isObject(value))
1529
- return [];
1530
- const nestedIds = Object.values(value).map((item) => getIds(item)).flat();
1531
- return isString(value.id) ? [value.id, ...nestedIds] : nestedIds;
2063
+ function isResponseWithRecords(value) {
2064
+ return isObject(value) && Array.isArray(value.records);
2065
+ }
2066
+ function extractId(value) {
2067
+ if (isString(value))
2068
+ return value;
2069
+ if (isObject(value) && isString(value.id))
2070
+ return value.id;
2071
+ return void 0;
2072
+ }
2073
+ function cleanFilter(filter) {
2074
+ if (!filter)
2075
+ return void 0;
2076
+ const values = Object.values(filter).filter(Boolean).filter((value) => Array.isArray(value) ? value.length > 0 : true);
2077
+ return values.length > 0 ? filter : void 0;
1532
2078
  }
1533
2079
 
1534
2080
  var __accessCheck$3 = (obj, member, msg) => {
@@ -1544,7 +2090,7 @@ var __privateAdd$3 = (obj, member, value) => {
1544
2090
  throw TypeError("Cannot add the same private member more than once");
1545
2091
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
1546
2092
  };
1547
- var __privateSet$2 = (obj, member, value, setter) => {
2093
+ var __privateSet$3 = (obj, member, value, setter) => {
1548
2094
  __accessCheck$3(obj, member, "write to private field");
1549
2095
  setter ? setter.call(obj, value) : member.set(obj, value);
1550
2096
  return value;
@@ -1553,9 +2099,8 @@ var _map;
1553
2099
  class SimpleCache {
1554
2100
  constructor(options = {}) {
1555
2101
  __privateAdd$3(this, _map, void 0);
1556
- __privateSet$2(this, _map, /* @__PURE__ */ new Map());
2102
+ __privateSet$3(this, _map, /* @__PURE__ */ new Map());
1557
2103
  this.capacity = options.max ?? 500;
1558
- this.cacheRecords = options.cacheRecords ?? true;
1559
2104
  this.defaultQueryTTL = options.defaultQueryTTL ?? 60 * 1e3;
1560
2105
  }
1561
2106
  async getAll() {
@@ -1581,18 +2126,25 @@ class SimpleCache {
1581
2126
  }
1582
2127
  _map = new WeakMap();
1583
2128
 
1584
- const gt = (value) => ({ $gt: value });
1585
- const ge = (value) => ({ $ge: value });
1586
- const gte = (value) => ({ $ge: value });
1587
- const lt = (value) => ({ $lt: value });
1588
- const lte = (value) => ({ $le: value });
1589
- const le = (value) => ({ $le: value });
2129
+ const greaterThan = (value) => ({ $gt: value });
2130
+ const gt = greaterThan;
2131
+ const greaterThanEquals = (value) => ({ $ge: value });
2132
+ const greaterEquals = greaterThanEquals;
2133
+ const gte = greaterThanEquals;
2134
+ const ge = greaterThanEquals;
2135
+ const lessThan = (value) => ({ $lt: value });
2136
+ const lt = lessThan;
2137
+ const lessThanEquals = (value) => ({ $le: value });
2138
+ const lessEquals = lessThanEquals;
2139
+ const lte = lessThanEquals;
2140
+ const le = lessThanEquals;
1590
2141
  const exists = (column) => ({ $exists: column });
1591
2142
  const notExists = (column) => ({ $notExists: column });
1592
2143
  const startsWith = (value) => ({ $startsWith: value });
1593
2144
  const endsWith = (value) => ({ $endsWith: value });
1594
2145
  const pattern = (value) => ({ $pattern: value });
1595
2146
  const is = (value) => ({ $is: value });
2147
+ const equals = is;
1596
2148
  const isNot = (value) => ({ $isNot: value });
1597
2149
  const contains = (value) => ({ $contains: value });
1598
2150
  const includes = (value) => ({ $includes: value });
@@ -1613,31 +2165,42 @@ var __privateAdd$2 = (obj, member, value) => {
1613
2165
  throw TypeError("Cannot add the same private member more than once");
1614
2166
  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
1615
2167
  };
1616
- var _tables;
2168
+ var __privateSet$2 = (obj, member, value, setter) => {
2169
+ __accessCheck$2(obj, member, "write to private field");
2170
+ setter ? setter.call(obj, value) : member.set(obj, value);
2171
+ return value;
2172
+ };
2173
+ var _tables, _schemaTables$1;
1617
2174
  class SchemaPlugin extends XataPlugin {
1618
- constructor(tableNames) {
2175
+ constructor(schemaTables) {
1619
2176
  super();
1620
- this.tableNames = tableNames;
1621
2177
  __privateAdd$2(this, _tables, {});
2178
+ __privateAdd$2(this, _schemaTables$1, void 0);
2179
+ __privateSet$2(this, _schemaTables$1, schemaTables);
1622
2180
  }
1623
2181
  build(pluginOptions) {
1624
- const db = new Proxy({}, {
1625
- get: (_target, table) => {
1626
- if (!isString(table))
1627
- throw new Error("Invalid table name");
1628
- if (!__privateGet$2(this, _tables)[table]) {
1629
- __privateGet$2(this, _tables)[table] = new RestRepository({ db, pluginOptions, table });
2182
+ const db = new Proxy(
2183
+ {},
2184
+ {
2185
+ get: (_target, table) => {
2186
+ if (!isString(table))
2187
+ throw new Error("Invalid table name");
2188
+ if (__privateGet$2(this, _tables)[table] === void 0) {
2189
+ __privateGet$2(this, _tables)[table] = new RestRepository({ db, pluginOptions, table, schemaTables: __privateGet$2(this, _schemaTables$1) });
2190
+ }
2191
+ return __privateGet$2(this, _tables)[table];
1630
2192
  }
1631
- return __privateGet$2(this, _tables)[table];
1632
2193
  }
1633
- });
1634
- for (const table of this.tableNames ?? []) {
1635
- db[table] = new RestRepository({ db, pluginOptions, table });
2194
+ );
2195
+ const tableNames = __privateGet$2(this, _schemaTables$1)?.map(({ name }) => name) ?? [];
2196
+ for (const table of tableNames) {
2197
+ db[table] = new RestRepository({ db, pluginOptions, table, schemaTables: __privateGet$2(this, _schemaTables$1) });
1636
2198
  }
1637
2199
  return db;
1638
2200
  }
1639
2201
  }
1640
2202
  _tables = new WeakMap();
2203
+ _schemaTables$1 = new WeakMap();
1641
2204
 
1642
2205
  var __accessCheck$1 = (obj, member, msg) => {
1643
2206
  if (!member.has(obj))
@@ -1661,105 +2224,119 @@ var __privateMethod$1 = (obj, member, method) => {
1661
2224
  __accessCheck$1(obj, member, "access private method");
1662
2225
  return method;
1663
2226
  };
1664
- var _schema, _search, search_fn, _getSchema, getSchema_fn;
2227
+ var _schemaTables, _search, search_fn, _getSchemaTables, getSchemaTables_fn;
1665
2228
  class SearchPlugin extends XataPlugin {
1666
- constructor(db) {
2229
+ constructor(db, schemaTables) {
1667
2230
  super();
1668
2231
  this.db = db;
1669
2232
  __privateAdd$1(this, _search);
1670
- __privateAdd$1(this, _getSchema);
1671
- __privateAdd$1(this, _schema, void 0);
2233
+ __privateAdd$1(this, _getSchemaTables);
2234
+ __privateAdd$1(this, _schemaTables, void 0);
2235
+ __privateSet$1(this, _schemaTables, schemaTables);
1672
2236
  }
1673
2237
  build({ getFetchProps }) {
1674
2238
  return {
1675
2239
  all: async (query, options = {}) => {
1676
2240
  const records = await __privateMethod$1(this, _search, search_fn).call(this, query, options, getFetchProps);
1677
- const schema = await __privateMethod$1(this, _getSchema, getSchema_fn).call(this, getFetchProps);
2241
+ const schemaTables = await __privateMethod$1(this, _getSchemaTables, getSchemaTables_fn).call(this, getFetchProps);
1678
2242
  return records.map((record) => {
1679
2243
  const { table = "orphan" } = record.xata;
1680
- return { table, record: initObject(this.db, schema, table, record) };
2244
+ return { table, record: initObject(this.db, schemaTables, table, record) };
1681
2245
  });
1682
2246
  },
1683
2247
  byTable: async (query, options = {}) => {
1684
2248
  const records = await __privateMethod$1(this, _search, search_fn).call(this, query, options, getFetchProps);
1685
- const schema = await __privateMethod$1(this, _getSchema, getSchema_fn).call(this, getFetchProps);
2249
+ const schemaTables = await __privateMethod$1(this, _getSchemaTables, getSchemaTables_fn).call(this, getFetchProps);
1686
2250
  return records.reduce((acc, record) => {
1687
2251
  const { table = "orphan" } = record.xata;
1688
2252
  const items = acc[table] ?? [];
1689
- const item = initObject(this.db, schema, table, record);
2253
+ const item = initObject(this.db, schemaTables, table, record);
1690
2254
  return { ...acc, [table]: [...items, item] };
1691
2255
  }, {});
1692
2256
  }
1693
2257
  };
1694
2258
  }
1695
2259
  }
1696
- _schema = new WeakMap();
2260
+ _schemaTables = new WeakMap();
1697
2261
  _search = new WeakSet();
1698
2262
  search_fn = async function(query, options, getFetchProps) {
1699
2263
  const fetchProps = await getFetchProps();
1700
- const { tables, fuzziness } = options ?? {};
2264
+ const { tables, fuzziness, highlight, prefix } = options ?? {};
1701
2265
  const { records } = await searchBranch({
1702
2266
  pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}" },
1703
- body: { tables, query, fuzziness },
2267
+ body: { tables, query, fuzziness, prefix, highlight },
1704
2268
  ...fetchProps
1705
2269
  });
1706
2270
  return records;
1707
2271
  };
1708
- _getSchema = new WeakSet();
1709
- getSchema_fn = async function(getFetchProps) {
1710
- if (__privateGet$1(this, _schema))
1711
- return __privateGet$1(this, _schema);
2272
+ _getSchemaTables = new WeakSet();
2273
+ getSchemaTables_fn = async function(getFetchProps) {
2274
+ if (__privateGet$1(this, _schemaTables))
2275
+ return __privateGet$1(this, _schemaTables);
1712
2276
  const fetchProps = await getFetchProps();
1713
2277
  const { schema } = await getBranchDetails({
1714
2278
  pathParams: { workspace: "{workspaceId}", dbBranchName: "{dbBranch}" },
1715
2279
  ...fetchProps
1716
2280
  });
1717
- __privateSet$1(this, _schema, schema);
1718
- return schema;
2281
+ __privateSet$1(this, _schemaTables, schema.tables);
2282
+ return schema.tables;
1719
2283
  };
1720
2284
 
1721
2285
  const isBranchStrategyBuilder = (strategy) => {
1722
2286
  return typeof strategy === "function";
1723
2287
  };
1724
2288
 
1725
- const envBranchNames = [
1726
- "XATA_BRANCH",
1727
- "VERCEL_GIT_COMMIT_REF",
1728
- "CF_PAGES_BRANCH",
1729
- "BRANCH"
1730
- ];
1731
- const defaultBranch = "main";
1732
2289
  async function getCurrentBranchName(options) {
1733
- const env = await getBranchByEnvVariable();
1734
- if (env)
1735
- return env;
1736
- const branch = await getGitBranch();
1737
- if (!branch)
1738
- return defaultBranch;
1739
- const details = await getDatabaseBranch(branch, options);
1740
- if (details)
1741
- return branch;
1742
- return defaultBranch;
2290
+ const { branch, envBranch } = getEnvironment();
2291
+ if (branch) {
2292
+ const details = await getDatabaseBranch(branch, options);
2293
+ if (details)
2294
+ return branch;
2295
+ console.warn(`Branch ${branch} not found in Xata. Ignoring...`);
2296
+ }
2297
+ const gitBranch = envBranch || await getGitBranch();
2298
+ return resolveXataBranch(gitBranch, options);
1743
2299
  }
1744
2300
  async function getCurrentBranchDetails(options) {
1745
- const env = await getBranchByEnvVariable();
1746
- if (env)
1747
- return getDatabaseBranch(env, options);
1748
- const branch = await getGitBranch();
1749
- if (!branch)
1750
- return getDatabaseBranch(defaultBranch, options);
1751
- const details = await getDatabaseBranch(branch, options);
1752
- if (details)
1753
- return details;
1754
- return getDatabaseBranch(defaultBranch, options);
2301
+ const branch = await getCurrentBranchName(options);
2302
+ return getDatabaseBranch(branch, options);
2303
+ }
2304
+ async function resolveXataBranch(gitBranch, options) {
2305
+ const databaseURL = options?.databaseURL || getDatabaseURL();
2306
+ const apiKey = options?.apiKey || getAPIKey();
2307
+ if (!databaseURL)
2308
+ throw new Error(
2309
+ "A databaseURL was not defined. Either set the XATA_DATABASE_URL env variable or pass the argument explicitely"
2310
+ );
2311
+ if (!apiKey)
2312
+ throw new Error(
2313
+ "An API key was not defined. Either set the XATA_API_KEY env variable or pass the argument explicitely"
2314
+ );
2315
+ const [protocol, , host, , dbName] = databaseURL.split("/");
2316
+ const [workspace] = host.split(".");
2317
+ const { fallbackBranch } = getEnvironment();
2318
+ const { branch } = await resolveBranch({
2319
+ apiKey,
2320
+ apiUrl: databaseURL,
2321
+ fetchImpl: getFetchImplementation(options?.fetchImpl),
2322
+ workspacesApiUrl: `${protocol}//${host}`,
2323
+ pathParams: { dbName, workspace },
2324
+ queryParams: { gitBranch, fallbackBranch },
2325
+ trace: defaultTrace
2326
+ });
2327
+ return branch;
1755
2328
  }
1756
2329
  async function getDatabaseBranch(branch, options) {
1757
2330
  const databaseURL = options?.databaseURL || getDatabaseURL();
1758
2331
  const apiKey = options?.apiKey || getAPIKey();
1759
2332
  if (!databaseURL)
1760
- throw new Error("A databaseURL was not defined. Either set the XATA_DATABASE_URL env variable or pass the argument explicitely");
2333
+ throw new Error(
2334
+ "A databaseURL was not defined. Either set the XATA_DATABASE_URL env variable or pass the argument explicitely"
2335
+ );
1761
2336
  if (!apiKey)
1762
- throw new Error("An API key was not defined. Either set the XATA_API_KEY env variable or pass the argument explicitely");
2337
+ throw new Error(
2338
+ "An API key was not defined. Either set the XATA_API_KEY env variable or pass the argument explicitely"
2339
+ );
1763
2340
  const [protocol, , host, , database] = databaseURL.split("/");
1764
2341
  const [workspace] = host.split(".");
1765
2342
  const dbBranchName = `${database}:${branch}`;
@@ -1769,10 +2346,8 @@ async function getDatabaseBranch(branch, options) {
1769
2346
  apiUrl: databaseURL,
1770
2347
  fetchImpl: getFetchImplementation(options?.fetchImpl),
1771
2348
  workspacesApiUrl: `${protocol}//${host}`,
1772
- pathParams: {
1773
- dbBranchName,
1774
- workspace
1775
- }
2349
+ pathParams: { dbBranchName, workspace },
2350
+ trace: defaultTrace
1776
2351
  });
1777
2352
  } catch (err) {
1778
2353
  if (isObject(err) && err.status === 404)
@@ -1780,21 +2355,10 @@ async function getDatabaseBranch(branch, options) {
1780
2355
  throw err;
1781
2356
  }
1782
2357
  }
1783
- function getBranchByEnvVariable() {
1784
- for (const name of envBranchNames) {
1785
- const value = getEnvVariable(name);
1786
- if (value) {
1787
- return value;
1788
- }
1789
- }
1790
- try {
1791
- return XATA_BRANCH;
1792
- } catch (err) {
1793
- }
1794
- }
1795
2358
  function getDatabaseURL() {
1796
2359
  try {
1797
- return getEnvVariable("XATA_DATABASE_URL") ?? XATA_DATABASE_URL;
2360
+ const { databaseURL } = getEnvironment();
2361
+ return databaseURL;
1798
2362
  } catch (err) {
1799
2363
  return void 0;
1800
2364
  }
@@ -1823,24 +2387,27 @@ var __privateMethod = (obj, member, method) => {
1823
2387
  return method;
1824
2388
  };
1825
2389
  const buildClient = (plugins) => {
1826
- var _branch, _parseOptions, parseOptions_fn, _getFetchProps, getFetchProps_fn, _evaluateBranch, evaluateBranch_fn, _a;
2390
+ var _branch, _options, _parseOptions, parseOptions_fn, _getFetchProps, getFetchProps_fn, _evaluateBranch, evaluateBranch_fn, _a;
1827
2391
  return _a = class {
1828
- constructor(options = {}, tables) {
2392
+ constructor(options = {}, schemaTables) {
1829
2393
  __privateAdd(this, _parseOptions);
1830
2394
  __privateAdd(this, _getFetchProps);
1831
2395
  __privateAdd(this, _evaluateBranch);
1832
2396
  __privateAdd(this, _branch, void 0);
2397
+ __privateAdd(this, _options, void 0);
1833
2398
  const safeOptions = __privateMethod(this, _parseOptions, parseOptions_fn).call(this, options);
2399
+ __privateSet(this, _options, safeOptions);
1834
2400
  const pluginOptions = {
1835
2401
  getFetchProps: () => __privateMethod(this, _getFetchProps, getFetchProps_fn).call(this, safeOptions),
1836
- cache: safeOptions.cache
2402
+ cache: safeOptions.cache,
2403
+ trace: safeOptions.trace
1837
2404
  };
1838
- const db = new SchemaPlugin(tables).build(pluginOptions);
1839
- const search = new SearchPlugin(db).build(pluginOptions);
2405
+ const db = new SchemaPlugin(schemaTables).build(pluginOptions);
2406
+ const search = new SearchPlugin(db, schemaTables).build(pluginOptions);
1840
2407
  this.db = db;
1841
2408
  this.search = search;
1842
2409
  for (const [key, namespace] of Object.entries(plugins ?? {})) {
1843
- if (!namespace)
2410
+ if (namespace === void 0)
1844
2411
  continue;
1845
2412
  const result = namespace.build(pluginOptions);
1846
2413
  if (result instanceof Promise) {
@@ -1852,22 +2419,26 @@ const buildClient = (plugins) => {
1852
2419
  }
1853
2420
  }
1854
2421
  }
1855
- }, _branch = new WeakMap(), _parseOptions = new WeakSet(), parseOptions_fn = function(options) {
2422
+ async getConfig() {
2423
+ const databaseURL = __privateGet(this, _options).databaseURL;
2424
+ const branch = await __privateGet(this, _options).branch();
2425
+ return { databaseURL, branch };
2426
+ }
2427
+ }, _branch = new WeakMap(), _options = new WeakMap(), _parseOptions = new WeakSet(), parseOptions_fn = function(options) {
1856
2428
  const fetch = getFetchImplementation(options?.fetch);
1857
2429
  const databaseURL = options?.databaseURL || getDatabaseURL();
1858
2430
  const apiKey = options?.apiKey || getAPIKey();
1859
- const cache = options?.cache ?? new SimpleCache({ cacheRecords: false, defaultQueryTTL: 0 });
1860
- const branch = async () => options?.branch ? await __privateMethod(this, _evaluateBranch, evaluateBranch_fn).call(this, options.branch) : await getCurrentBranchName({ apiKey, databaseURL, fetchImpl: options?.fetch });
1861
- if (!databaseURL || !apiKey) {
1862
- throw new Error("Options databaseURL and apiKey are required");
2431
+ const cache = options?.cache ?? new SimpleCache({ defaultQueryTTL: 0 });
2432
+ const trace = options?.trace ?? defaultTrace;
2433
+ const branch = async () => options?.branch !== void 0 ? await __privateMethod(this, _evaluateBranch, evaluateBranch_fn).call(this, options.branch) : await getCurrentBranchName({ apiKey, databaseURL, fetchImpl: options?.fetch });
2434
+ if (!apiKey) {
2435
+ throw new Error("Option apiKey is required");
1863
2436
  }
1864
- return { fetch, databaseURL, apiKey, branch, cache };
1865
- }, _getFetchProps = new WeakSet(), getFetchProps_fn = async function({
1866
- fetch,
1867
- apiKey,
1868
- databaseURL,
1869
- branch
1870
- }) {
2437
+ if (!databaseURL) {
2438
+ throw new Error("Option databaseURL is required");
2439
+ }
2440
+ return { fetch, databaseURL, apiKey, branch, cache, trace };
2441
+ }, _getFetchProps = new WeakSet(), getFetchProps_fn = async function({ fetch, apiKey, databaseURL, branch, trace }) {
1871
2442
  const branchValue = await __privateMethod(this, _evaluateBranch, evaluateBranch_fn).call(this, branch);
1872
2443
  if (!branchValue)
1873
2444
  throw new Error("Unable to resolve branch value");
@@ -1877,14 +2448,15 @@ const buildClient = (plugins) => {
1877
2448
  apiUrl: "",
1878
2449
  workspacesApiUrl: (path, params) => {
1879
2450
  const hasBranch = params.dbBranchName ?? params.branch;
1880
- const newPath = path.replace(/^\/db\/[^/]+/, hasBranch ? `:${branchValue}` : "");
2451
+ const newPath = path.replace(/^\/db\/[^/]+/, hasBranch !== void 0 ? `:${branchValue}` : "");
1881
2452
  return databaseURL + newPath;
1882
- }
2453
+ },
2454
+ trace
1883
2455
  };
1884
2456
  }, _evaluateBranch = new WeakSet(), evaluateBranch_fn = async function(param) {
1885
2457
  if (__privateGet(this, _branch))
1886
2458
  return __privateGet(this, _branch);
1887
- if (!param)
2459
+ if (param === void 0)
1888
2460
  return void 0;
1889
2461
  const strategies = Array.isArray(param) ? [...param] : [param];
1890
2462
  const evaluateBranch = async (strategy) => {
@@ -1902,6 +2474,88 @@ const buildClient = (plugins) => {
1902
2474
  class BaseClient extends buildClient() {
1903
2475
  }
1904
2476
 
2477
+ const META = "__";
2478
+ const VALUE = "___";
2479
+ class Serializer {
2480
+ constructor() {
2481
+ this.classes = {};
2482
+ }
2483
+ add(clazz) {
2484
+ this.classes[clazz.name] = clazz;
2485
+ }
2486
+ toJSON(data) {
2487
+ function visit(obj) {
2488
+ if (Array.isArray(obj))
2489
+ return obj.map(visit);
2490
+ const type = typeof obj;
2491
+ if (type === "undefined")
2492
+ return { [META]: "undefined" };
2493
+ if (type === "bigint")
2494
+ return { [META]: "bigint", [VALUE]: obj.toString() };
2495
+ if (obj === null || type !== "object")
2496
+ return obj;
2497
+ const constructor = obj.constructor;
2498
+ const o = { [META]: constructor.name };
2499
+ for (const [key, value] of Object.entries(obj)) {
2500
+ o[key] = visit(value);
2501
+ }
2502
+ if (constructor === Date)
2503
+ o[VALUE] = obj.toISOString();
2504
+ if (constructor === Map)
2505
+ o[VALUE] = Object.fromEntries(obj);
2506
+ if (constructor === Set)
2507
+ o[VALUE] = [...obj];
2508
+ return o;
2509
+ }
2510
+ return JSON.stringify(visit(data));
2511
+ }
2512
+ fromJSON(json) {
2513
+ return JSON.parse(json, (key, value) => {
2514
+ if (value && typeof value === "object" && !Array.isArray(value)) {
2515
+ const { [META]: clazz, [VALUE]: val, ...rest } = value;
2516
+ const constructor = this.classes[clazz];
2517
+ if (constructor) {
2518
+ return Object.assign(Object.create(constructor.prototype), rest);
2519
+ }
2520
+ if (clazz === "Date")
2521
+ return new Date(val);
2522
+ if (clazz === "Set")
2523
+ return new Set(val);
2524
+ if (clazz === "Map")
2525
+ return new Map(Object.entries(val));
2526
+ if (clazz === "bigint")
2527
+ return BigInt(val);
2528
+ if (clazz === "undefined")
2529
+ return void 0;
2530
+ return rest;
2531
+ }
2532
+ return value;
2533
+ });
2534
+ }
2535
+ }
2536
+ const defaultSerializer = new Serializer();
2537
+ const serialize = (data) => {
2538
+ return defaultSerializer.toJSON(data);
2539
+ };
2540
+ const deserialize = (json) => {
2541
+ return defaultSerializer.fromJSON(json);
2542
+ };
2543
+
2544
+ function buildWorkerRunner(config) {
2545
+ return function xataWorker(name, _worker) {
2546
+ return async (...args) => {
2547
+ const url = process.env.NODE_ENV === "development" ? `http://localhost:64749/${name}` : `https://dispatcher.xata.workers.dev/${config.workspace}/${config.worker}/${name}`;
2548
+ const result = await fetch(url, {
2549
+ method: "POST",
2550
+ headers: { "Content-Type": "application/json" },
2551
+ body: serialize({ args })
2552
+ });
2553
+ const text = await result.text();
2554
+ return deserialize(text);
2555
+ };
2556
+ };
2557
+ }
2558
+
1905
2559
  class XataError extends Error {
1906
2560
  constructor(message, status) {
1907
2561
  super(message);
@@ -1917,10 +2571,12 @@ exports.PAGINATION_MAX_OFFSET = PAGINATION_MAX_OFFSET;
1917
2571
  exports.PAGINATION_MAX_SIZE = PAGINATION_MAX_SIZE;
1918
2572
  exports.Page = Page;
1919
2573
  exports.Query = Query;
2574
+ exports.RecordArray = RecordArray;
1920
2575
  exports.Repository = Repository;
1921
2576
  exports.RestRepository = RestRepository;
1922
2577
  exports.SchemaPlugin = SchemaPlugin;
1923
2578
  exports.SearchPlugin = SearchPlugin;
2579
+ exports.Serializer = Serializer;
1924
2580
  exports.SimpleCache = SimpleCache;
1925
2581
  exports.XataApiClient = XataApiClient;
1926
2582
  exports.XataApiPlugin = XataApiPlugin;
@@ -1929,12 +2585,18 @@ exports.XataPlugin = XataPlugin;
1929
2585
  exports.acceptWorkspaceMemberInvite = acceptWorkspaceMemberInvite;
1930
2586
  exports.addGitBranchesEntry = addGitBranchesEntry;
1931
2587
  exports.addTableColumn = addTableColumn;
2588
+ exports.applyBranchSchemaEdit = applyBranchSchemaEdit;
1932
2589
  exports.buildClient = buildClient;
2590
+ exports.buildWorkerRunner = buildWorkerRunner;
1933
2591
  exports.bulkInsertTableRecords = bulkInsertTableRecords;
1934
2592
  exports.cancelWorkspaceMemberInvite = cancelWorkspaceMemberInvite;
2593
+ exports.compareBranchSchemas = compareBranchSchemas;
2594
+ exports.compareBranchWithUserSchema = compareBranchWithUserSchema;
2595
+ exports.compareMigrationRequest = compareMigrationRequest;
1935
2596
  exports.contains = contains;
1936
2597
  exports.createBranch = createBranch;
1937
2598
  exports.createDatabase = createDatabase;
2599
+ exports.createMigrationRequest = createMigrationRequest;
1938
2600
  exports.createTable = createTable;
1939
2601
  exports.createUserAPIKey = createUserAPIKey;
1940
2602
  exports.createWorkspace = createWorkspace;
@@ -1946,7 +2608,9 @@ exports.deleteTable = deleteTable;
1946
2608
  exports.deleteUser = deleteUser;
1947
2609
  exports.deleteUserAPIKey = deleteUserAPIKey;
1948
2610
  exports.deleteWorkspace = deleteWorkspace;
2611
+ exports.deserialize = deserialize;
1949
2612
  exports.endsWith = endsWith;
2613
+ exports.equals = equals;
1950
2614
  exports.executeBranchMigrationPlan = executeBranchMigrationPlan;
1951
2615
  exports.exists = exists;
1952
2616
  exports.ge = ge;
@@ -1956,13 +2620,17 @@ exports.getBranchList = getBranchList;
1956
2620
  exports.getBranchMetadata = getBranchMetadata;
1957
2621
  exports.getBranchMigrationHistory = getBranchMigrationHistory;
1958
2622
  exports.getBranchMigrationPlan = getBranchMigrationPlan;
2623
+ exports.getBranchSchemaHistory = getBranchSchemaHistory;
1959
2624
  exports.getBranchStats = getBranchStats;
1960
2625
  exports.getColumn = getColumn;
1961
2626
  exports.getCurrentBranchDetails = getCurrentBranchDetails;
1962
2627
  exports.getCurrentBranchName = getCurrentBranchName;
1963
2628
  exports.getDatabaseList = getDatabaseList;
2629
+ exports.getDatabaseMetadata = getDatabaseMetadata;
1964
2630
  exports.getDatabaseURL = getDatabaseURL;
1965
2631
  exports.getGitBranchesMapping = getGitBranchesMapping;
2632
+ exports.getMigrationRequest = getMigrationRequest;
2633
+ exports.getMigrationRequestIsMerged = getMigrationRequestIsMerged;
1966
2634
  exports.getRecord = getRecord;
1967
2635
  exports.getTableColumns = getTableColumns;
1968
2636
  exports.getTableSchema = getTableSchema;
@@ -1971,6 +2639,9 @@ exports.getUserAPIKeys = getUserAPIKeys;
1971
2639
  exports.getWorkspace = getWorkspace;
1972
2640
  exports.getWorkspaceMembersList = getWorkspaceMembersList;
1973
2641
  exports.getWorkspacesList = getWorkspacesList;
2642
+ exports.greaterEquals = greaterEquals;
2643
+ exports.greaterThan = greaterThan;
2644
+ exports.greaterThanEquals = greaterThanEquals;
1974
2645
  exports.gt = gt;
1975
2646
  exports.gte = gte;
1976
2647
  exports.includes = includes;
@@ -1981,29 +2652,43 @@ exports.insertRecord = insertRecord;
1981
2652
  exports.insertRecordWithID = insertRecordWithID;
1982
2653
  exports.inviteWorkspaceMember = inviteWorkspaceMember;
1983
2654
  exports.is = is;
2655
+ exports.isCursorPaginationOptions = isCursorPaginationOptions;
1984
2656
  exports.isIdentifiable = isIdentifiable;
1985
2657
  exports.isNot = isNot;
1986
2658
  exports.isXataRecord = isXataRecord;
1987
2659
  exports.le = le;
2660
+ exports.lessEquals = lessEquals;
2661
+ exports.lessThan = lessThan;
2662
+ exports.lessThanEquals = lessThanEquals;
2663
+ exports.listMigrationRequests = listMigrationRequests;
2664
+ exports.listMigrationRequestsCommits = listMigrationRequestsCommits;
1988
2665
  exports.lt = lt;
1989
2666
  exports.lte = lte;
2667
+ exports.mergeMigrationRequest = mergeMigrationRequest;
1990
2668
  exports.notExists = notExists;
1991
2669
  exports.operationsByTag = operationsByTag;
1992
2670
  exports.pattern = pattern;
2671
+ exports.previewBranchSchemaEdit = previewBranchSchemaEdit;
1993
2672
  exports.queryTable = queryTable;
1994
2673
  exports.removeGitBranchesEntry = removeGitBranchesEntry;
1995
2674
  exports.removeWorkspaceMember = removeWorkspaceMember;
1996
2675
  exports.resendWorkspaceMemberInvite = resendWorkspaceMemberInvite;
1997
2676
  exports.resolveBranch = resolveBranch;
1998
2677
  exports.searchBranch = searchBranch;
2678
+ exports.searchTable = searchTable;
2679
+ exports.serialize = serialize;
1999
2680
  exports.setTableSchema = setTableSchema;
2000
2681
  exports.startsWith = startsWith;
2001
2682
  exports.updateBranchMetadata = updateBranchMetadata;
2683
+ exports.updateBranchSchema = updateBranchSchema;
2002
2684
  exports.updateColumn = updateColumn;
2685
+ exports.updateDatabaseMetadata = updateDatabaseMetadata;
2686
+ exports.updateMigrationRequest = updateMigrationRequest;
2003
2687
  exports.updateRecordWithID = updateRecordWithID;
2004
2688
  exports.updateTable = updateTable;
2005
2689
  exports.updateUser = updateUser;
2006
2690
  exports.updateWorkspace = updateWorkspace;
2691
+ exports.updateWorkspaceMemberInvite = updateWorkspaceMemberInvite;
2007
2692
  exports.updateWorkspaceMemberRole = updateWorkspaceMemberRole;
2008
2693
  exports.upsertRecordWithID = upsertRecordWithID;
2009
2694
  //# sourceMappingURL=index.cjs.map