@xata.io/client 0.0.0-beta.44b2150 → 0.0.0-beta.4e4e7fc

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.js CHANGED
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -9,265 +13,8 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
9
13
  var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
15
  };
12
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
- return new (P || (P = Promise))(function (resolve, reject) {
15
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
- step((generator = generator.apply(thisArg, _arguments || [])).next());
19
- });
20
- };
21
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
22
- if (kind === "m") throw new TypeError("Private method is not writable");
23
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
24
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
25
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
26
- };
27
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
28
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
29
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
30
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
31
- };
32
- var __asyncValues = (this && this.__asyncValues) || function (o) {
33
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
34
- var m = o[Symbol.asyncIterator], i;
35
- return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
36
- function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
37
- function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
38
- };
39
- var _RestRepository_client, _RestRepository_fetch, _RestRepository_table;
40
16
  Object.defineProperty(exports, "__esModule", { value: true });
41
- exports.XataError = exports.BaseClient = exports.RestRespositoryFactory = exports.RestRepository = exports.Repository = void 0;
42
- const filters_1 = require("./schema/filters");
43
- const pagination_1 = require("./schema/pagination");
44
- const query_1 = require("./schema/query");
45
- const errors_1 = require("./util/errors");
46
- class Repository extends query_1.Query {
47
- }
48
- exports.Repository = Repository;
49
- class RestRepository extends Repository {
50
- constructor(client, table) {
51
- super(null, table, {});
52
- _RestRepository_client.set(this, void 0);
53
- _RestRepository_fetch.set(this, void 0);
54
- _RestRepository_table.set(this, void 0);
55
- __classPrivateFieldSet(this, _RestRepository_client, client, "f");
56
- __classPrivateFieldSet(this, _RestRepository_table, table, "f");
57
- const doWeHaveFetch = typeof fetch !== 'undefined';
58
- const isInjectedFetchProblematic = !__classPrivateFieldGet(this, _RestRepository_client, "f").options.fetch;
59
- if (doWeHaveFetch) {
60
- __classPrivateFieldSet(this, _RestRepository_fetch, fetch, "f");
61
- }
62
- else if (isInjectedFetchProblematic) {
63
- throw new Error(errors_1.errors.falsyFetchImplementation);
64
- }
65
- else {
66
- __classPrivateFieldSet(this, _RestRepository_fetch, __classPrivateFieldGet(this, _RestRepository_client, "f").options.fetch, "f");
67
- }
68
- }
69
- request(method, path, body) {
70
- return __awaiter(this, void 0, void 0, function* () {
71
- const { databaseURL, apiKey } = __classPrivateFieldGet(this, _RestRepository_client, "f").options;
72
- const branch = yield __classPrivateFieldGet(this, _RestRepository_client, "f").getBranch();
73
- const fetchImpl = __classPrivateFieldGet(this, _RestRepository_fetch, "f");
74
- const resp = yield fetchImpl(`${databaseURL}:${branch}${path}`, {
75
- method,
76
- headers: {
77
- Accept: '*/*',
78
- 'Content-Type': 'application/json',
79
- Authorization: `Bearer ${apiKey}`
80
- },
81
- body: JSON.stringify(body)
82
- });
83
- if (!resp.ok) {
84
- try {
85
- const json = yield resp.json();
86
- const message = json.message;
87
- if (typeof message === 'string') {
88
- throw new XataError(message, resp.status);
89
- }
90
- }
91
- catch (err) {
92
- if (err instanceof XataError)
93
- throw err;
94
- // Ignore errors for other reasons.
95
- // For example if the response's body cannot be parsed as JSON
96
- }
97
- throw new XataError(resp.statusText, resp.status);
98
- }
99
- if (resp.status === 204)
100
- return undefined;
101
- return resp.json();
102
- });
103
- }
104
- create(object) {
105
- return __awaiter(this, void 0, void 0, function* () {
106
- const record = transformObjectLinks(object);
107
- const response = yield this.request('POST', `/tables/${__classPrivateFieldGet(this, _RestRepository_table, "f")}/data`, record);
108
- if (!response) {
109
- throw new Error("The server didn't return any data for the query");
110
- }
111
- const finalObject = yield this.read(response.id);
112
- if (!finalObject) {
113
- throw new Error('The server failed to save the record');
114
- }
115
- return finalObject;
116
- });
117
- }
118
- createMany(objects) {
119
- return __awaiter(this, void 0, void 0, function* () {
120
- const records = objects.map((object) => transformObjectLinks(object));
121
- const response = yield this.request('POST', `/tables/${__classPrivateFieldGet(this, _RestRepository_table, "f")}/bulk`, { records });
122
- if (!response) {
123
- throw new Error("The server didn't return any data for the query");
124
- }
125
- // TODO: Use filer.$any() to get all the records
126
- const finalObjects = yield Promise.all(response.recordIDs.map((id) => this.read(id)));
127
- if (finalObjects.some((object) => !object)) {
128
- throw new Error('The server failed to save the record');
129
- }
130
- return finalObjects;
131
- });
132
- }
133
- read(id) {
134
- return __awaiter(this, void 0, void 0, function* () {
135
- try {
136
- const response = yield this.request('GET', `/tables/${__classPrivateFieldGet(this, _RestRepository_table, "f")}/data/${id}`);
137
- if (!response)
138
- return null;
139
- return __classPrivateFieldGet(this, _RestRepository_client, "f").initObject(__classPrivateFieldGet(this, _RestRepository_table, "f"), response);
140
- }
141
- catch (err) {
142
- if (err.status === 404)
143
- return null;
144
- throw err;
145
- }
146
- });
147
- }
148
- update(id, object) {
149
- return __awaiter(this, void 0, void 0, function* () {
150
- const response = yield this.request('PUT', `/tables/${__classPrivateFieldGet(this, _RestRepository_table, "f")}/data/${id}`, object);
151
- if (!response) {
152
- throw new Error("The server didn't return any data for the query");
153
- }
154
- // TODO: Review this, not sure we are properly initializing the object
155
- return __classPrivateFieldGet(this, _RestRepository_client, "f").initObject(__classPrivateFieldGet(this, _RestRepository_table, "f"), response);
156
- });
157
- }
158
- delete(id) {
159
- return __awaiter(this, void 0, void 0, function* () {
160
- yield this.request('DELETE', `/tables/${__classPrivateFieldGet(this, _RestRepository_table, "f")}/data/${id}`);
161
- });
162
- }
163
- query(query, options) {
164
- var _a, _b, _c;
165
- return __awaiter(this, void 0, void 0, function* () {
166
- const data = query.getQueryOptions();
167
- const body = {
168
- filter: Object.values(data.filter).some(Boolean) ? data.filter : undefined,
169
- sort: (_a = (0, filters_1.buildSortFilter)(options === null || options === void 0 ? void 0 : options.sort)) !== null && _a !== void 0 ? _a : data.sort,
170
- page: (_b = options === null || options === void 0 ? void 0 : options.page) !== null && _b !== void 0 ? _b : data.page,
171
- columns: (_c = options === null || options === void 0 ? void 0 : options.columns) !== null && _c !== void 0 ? _c : data.columns
172
- };
173
- const response = yield this.request('POST', `/tables/${__classPrivateFieldGet(this, _RestRepository_table, "f")}/query`, body);
174
- if (!response) {
175
- throw new Error("The server didn't return any data for the query");
176
- }
177
- const { meta, records: objects } = response;
178
- const records = objects.map((record) => __classPrivateFieldGet(this, _RestRepository_client, "f").initObject(__classPrivateFieldGet(this, _RestRepository_table, "f"), record));
179
- // TODO: We should properly type this any
180
- return new pagination_1.Page(query, meta, records);
181
- });
182
- }
183
- }
184
- exports.RestRepository = RestRepository;
185
- _RestRepository_client = new WeakMap(), _RestRepository_fetch = new WeakMap(), _RestRepository_table = new WeakMap();
186
- class RestRespositoryFactory {
187
- createRepository(client, table) {
188
- return new RestRepository(client, table);
189
- }
190
- }
191
- exports.RestRespositoryFactory = RestRespositoryFactory;
192
- class BaseClient {
193
- constructor(options, links) {
194
- if (!options.databaseURL || !options.apiKey || !options.branch) {
195
- throw new Error('Options databaseURL, apiKey and branch are required');
196
- }
197
- this.options = options;
198
- this.links = links;
199
- }
200
- initObject(table, object) {
201
- const o = {};
202
- Object.assign(o, object);
203
- const tableLinks = this.links[table] || [];
204
- for (const link of tableLinks) {
205
- const [field, linkTable] = link;
206
- const value = o[field];
207
- if (value && typeof value === 'object') {
208
- const { id } = value;
209
- if (Object.keys(value).find((col) => col === 'id')) {
210
- o[field] = this.initObject(linkTable, value);
211
- }
212
- else if (id) {
213
- o[field] = {
214
- id,
215
- get: () => {
216
- this.db[linkTable].read(id);
217
- }
218
- };
219
- }
220
- }
221
- }
222
- const db = this.db;
223
- o.read = function () {
224
- return db[table].read(o['id']);
225
- };
226
- o.update = function (data) {
227
- return db[table].update(o['id'], data);
228
- };
229
- o.delete = function () {
230
- return db[table].delete(o['id']);
231
- };
232
- for (const prop of ['read', 'update', 'delete']) {
233
- Object.defineProperty(o, prop, { enumerable: false });
234
- }
235
- // TODO: links and rev links
236
- Object.freeze(o);
237
- return o;
238
- }
239
- getBranch() {
240
- var e_1, _a;
241
- return __awaiter(this, void 0, void 0, function* () {
242
- if (this.branch)
243
- return this.branch;
244
- const { branch: param } = this.options;
245
- const strategies = Array.isArray(param) ? [...param] : [param];
246
- const evaluateBranch = (strategy) => __awaiter(this, void 0, void 0, function* () {
247
- return isBranchStrategyBuilder(strategy) ? yield strategy() : strategy;
248
- });
249
- try {
250
- for (var strategies_1 = __asyncValues(strategies), strategies_1_1; strategies_1_1 = yield strategies_1.next(), !strategies_1_1.done;) {
251
- const strategy = strategies_1_1.value;
252
- const branch = yield evaluateBranch(strategy);
253
- if (branch) {
254
- this.branch = branch;
255
- return branch;
256
- }
257
- }
258
- }
259
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
260
- finally {
261
- try {
262
- if (strategies_1_1 && !strategies_1_1.done && (_a = strategies_1.return)) yield _a.call(strategies_1);
263
- }
264
- finally { if (e_1) throw e_1.error; }
265
- }
266
- throw new Error('Unable to resolve branch value');
267
- });
268
- }
269
- }
270
- exports.BaseClient = BaseClient;
17
+ exports.XataError = void 0;
271
18
  class XataError extends Error {
272
19
  constructor(message, status) {
273
20
  super(message);
@@ -275,16 +22,5 @@ class XataError extends Error {
275
22
  }
276
23
  }
277
24
  exports.XataError = XataError;
278
- const isBranchStrategyBuilder = (strategy) => {
279
- return typeof strategy === 'function';
280
- };
281
- // TODO: We can find a better implementation for links
282
- const transformObjectLinks = (object) => {
283
- return Object.entries(object).reduce((acc, [key, value]) => {
284
- if (value && typeof value === 'object' && typeof value.id === 'string') {
285
- return Object.assign(Object.assign({}, acc), { [key]: value.id });
286
- }
287
- return Object.assign(Object.assign({}, acc), { [key]: value });
288
- }, {});
289
- };
25
+ __exportStar(require("./api"), exports);
290
26
  __exportStar(require("./schema"), exports);
@@ -1 +1,5 @@
1
1
  export * from './operators';
2
+ export type { XataRecord } from './record';
3
+ export { Repository, RestRepository, RestRespositoryFactory, BaseClient } from './repository';
4
+ export type { XataClientOptions } from './repository';
5
+ export { Query } from './query';
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -10,4 +14,12 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
15
  };
12
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.Query = exports.BaseClient = exports.RestRespositoryFactory = exports.RestRepository = exports.Repository = void 0;
13
18
  __exportStar(require("./operators"), exports);
19
+ var repository_1 = require("./repository");
20
+ Object.defineProperty(exports, "Repository", { enumerable: true, get: function () { return repository_1.Repository; } });
21
+ Object.defineProperty(exports, "RestRepository", { enumerable: true, get: function () { return repository_1.RestRepository; } });
22
+ Object.defineProperty(exports, "RestRespositoryFactory", { enumerable: true, get: function () { return repository_1.RestRespositoryFactory; } });
23
+ Object.defineProperty(exports, "BaseClient", { enumerable: true, get: function () { return repository_1.BaseClient; } });
24
+ var query_1 = require("./query");
25
+ Object.defineProperty(exports, "Query", { enumerable: true, get: function () { return query_1.Query; } });
@@ -1,78 +1,13 @@
1
1
  import { XataRecord, Repository } from '..';
2
+ import { FilterExpression, SortExpression, PageConfig, ColumnsFilter } from '../api/schemas';
2
3
  import { DeepConstraint, FilterConstraints, SortDirection, SortFilter } from './filters';
3
4
  import { PaginationOptions, Page, Paginable, PaginationQueryMeta } from './pagination';
4
5
  import { Selectable, SelectableColumn, Select } from './selection';
5
- export declare type QueryOptions<T> = {
6
+ export declare type QueryOptions<T extends XataRecord> = {
6
7
  page?: PaginationOptions;
7
- columns?: Array<keyof Selectable<T>>;
8
+ columns?: Extract<keyof Selectable<T>, string>[];
8
9
  sort?: SortFilter<T> | SortFilter<T>[];
9
10
  };
10
- export declare type FilterExpression = {
11
- $exists?: string;
12
- $existsNot?: string;
13
- $any?: FilterList;
14
- $all?: FilterList;
15
- $none?: FilterList;
16
- $not?: FilterList;
17
- } & {
18
- [key: string]: FilterColumn;
19
- };
20
- export declare type FilterList = FilterExpression | FilterExpression[];
21
- export declare type FilterColumn = FilterColumnIncludes | FilterPredicate | FilterList;
22
- /**
23
- * @maxProperties 1
24
- * @minProperties 1
25
- */
26
- export declare type FilterColumnIncludes = {
27
- $includes?: FilterPredicate;
28
- $includesAny?: FilterPredicate;
29
- $includesAll?: FilterPredicate;
30
- $includesNone?: FilterPredicate;
31
- };
32
- export declare type FilterPredicate = FilterValue | FilterPredicate[] | FilterPredicateOp | FilterPredicateRangeOp;
33
- /**
34
- * @maxProperties 1
35
- * @minProperties 1
36
- */
37
- export declare type FilterPredicateOp = {
38
- $any?: FilterPredicate[];
39
- $all?: FilterPredicate[];
40
- $none?: FilterPredicate | FilterPredicate[];
41
- $not?: FilterPredicate | FilterPredicate[];
42
- $is?: FilterValue | FilterValue[];
43
- $isNot?: FilterValue | FilterValue[];
44
- $lt?: FilterRangeValue;
45
- $le?: FilterRangeValue;
46
- $gt?: FilterRangeValue;
47
- $ge?: FilterRangeValue;
48
- $contains?: string;
49
- $startsWith?: string;
50
- $endsWith?: string;
51
- $pattern?: string;
52
- };
53
- export declare type FilterPredicateRangeOp = {
54
- $lt?: FilterRangeValue;
55
- $le?: FilterRangeValue;
56
- $gt?: FilterRangeValue;
57
- $ge?: FilterRangeValue;
58
- };
59
- export declare type FilterRangeValue = number | string;
60
- export declare type FilterValue = number | string | boolean;
61
- export declare type SortExpression = string[] | {
62
- [key: string]: SortOrder;
63
- } | {
64
- [key: string]: SortOrder;
65
- }[];
66
- export declare type SortOrder = 'asc' | 'desc';
67
- export declare type PageConfig = {
68
- after?: string;
69
- before?: string;
70
- first?: string;
71
- last?: string;
72
- size?: number;
73
- offset?: number;
74
- };
75
- export declare type ColumnsFilter = string[];
76
11
  export declare type QueryTableOptions = {
77
12
  filter: FilterExpression;
78
13
  sort?: SortExpression;
@@ -77,19 +77,19 @@ class Query {
77
77
  return __classPrivateFieldGet(this, _Query_data, "f");
78
78
  }
79
79
  any(...queries) {
80
- const $any = (0, lang_1.compact)(queries.map((query) => query.getQueryOptions().filter.$any)).flat();
80
+ const $any = queries.map((query) => query.getQueryOptions().filter);
81
81
  return new Query(__classPrivateFieldGet(this, _Query_repository, "f"), __classPrivateFieldGet(this, _Query_table, "f"), { filter: { $any } }, __classPrivateFieldGet(this, _Query_data, "f"));
82
82
  }
83
83
  all(...queries) {
84
- const $all = (0, lang_1.compact)(queries.map((query) => query.getQueryOptions().filter.$all)).flat();
84
+ const $all = queries.map((query) => query.getQueryOptions().filter);
85
85
  return new Query(__classPrivateFieldGet(this, _Query_repository, "f"), __classPrivateFieldGet(this, _Query_table, "f"), { filter: { $all } }, __classPrivateFieldGet(this, _Query_data, "f"));
86
86
  }
87
87
  not(...queries) {
88
- const $not = (0, lang_1.compact)(queries.map((query) => query.getQueryOptions().filter.$not)).flat();
88
+ const $not = queries.map((query) => query.getQueryOptions().filter);
89
89
  return new Query(__classPrivateFieldGet(this, _Query_repository, "f"), __classPrivateFieldGet(this, _Query_table, "f"), { filter: { $not } }, __classPrivateFieldGet(this, _Query_data, "f"));
90
90
  }
91
91
  none(...queries) {
92
- const $none = (0, lang_1.compact)(queries.map((query) => query.getQueryOptions().filter.$none)).flat();
92
+ const $none = queries.map((query) => query.getQueryOptions().filter);
93
93
  return new Query(__classPrivateFieldGet(this, _Query_repository, "f"), __classPrivateFieldGet(this, _Query_table, "f"), { filter: { $none } }, __classPrivateFieldGet(this, _Query_data, "f"));
94
94
  }
95
95
  filter(a, b) {
@@ -0,0 +1,10 @@
1
+ import { Selectable } from './selection';
2
+ export interface XataRecord {
3
+ id: string;
4
+ xata: {
5
+ version: number;
6
+ };
7
+ read(): Promise<this>;
8
+ update(data: Partial<Selectable<this>>): Promise<this>;
9
+ delete(): Promise<void>;
10
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,52 @@
1
+ import { FetchImpl } from '../api/fetcher';
2
+ import { Page } from './pagination';
3
+ import { Query, QueryOptions } from './query';
4
+ import { XataRecord } from './record';
5
+ import { Selectable, SelectableColumn, Select } from './selection';
6
+ export declare type Links = Record<string, Array<string[]>>;
7
+ export declare abstract class Repository<T extends XataRecord> extends Query<T> {
8
+ abstract create(object: Selectable<T>): Promise<T>;
9
+ abstract createMany(objects: Selectable<T>[]): Promise<T[]>;
10
+ abstract read(id: string): Promise<T | null>;
11
+ abstract update(id: string, object: Partial<Selectable<T>>): Promise<T>;
12
+ abstract upsert(id: string, object: Selectable<T>): Promise<T>;
13
+ abstract delete(id: string): void;
14
+ abstract query<R extends XataRecord, Options extends QueryOptions<T>>(query: Query<T, R>, options: Options): Promise<Page<T, typeof options['columns'] extends SelectableColumn<T>[] ? Select<T, typeof options['columns'][number]> : R>>;
15
+ }
16
+ export declare class RestRepository<T extends XataRecord> extends Repository<T> {
17
+ #private;
18
+ constructor(client: BaseClient<any>, table: string);
19
+ create(object: Selectable<T>): Promise<T>;
20
+ createMany(objects: T[]): Promise<T[]>;
21
+ read(recordId: string): Promise<T | null>;
22
+ update(recordId: string, object: Partial<Selectable<T>>): Promise<T>;
23
+ upsert(recordId: string, object: Selectable<T>): Promise<T>;
24
+ delete(recordId: string): Promise<void>;
25
+ query<R extends XataRecord, Options extends QueryOptions<T>>(query: Query<T, R>, options: Options): Promise<Page<T, typeof options['columns'] extends SelectableColumn<T>[] ? Select<T, typeof options['columns'][number]> : R>>;
26
+ }
27
+ interface RepositoryFactory {
28
+ createRepository<T extends XataRecord>(client: BaseClient<any>, table: string): Repository<T>;
29
+ }
30
+ export declare class RestRespositoryFactory implements RepositoryFactory {
31
+ createRepository<T extends XataRecord>(client: BaseClient<any>, table: string): Repository<T>;
32
+ }
33
+ declare type BranchStrategyValue = string | undefined | null;
34
+ declare type BranchStrategyBuilder = () => BranchStrategyValue | Promise<BranchStrategyValue>;
35
+ declare type BranchStrategy = BranchStrategyValue | BranchStrategyBuilder;
36
+ declare type BranchStrategyOption = NonNullable<BranchStrategy | BranchStrategy[]>;
37
+ export declare type XataClientOptions = {
38
+ fetch?: FetchImpl;
39
+ databaseURL?: string;
40
+ branch: BranchStrategyOption;
41
+ apiKey: string;
42
+ repositoryFactory?: RepositoryFactory;
43
+ };
44
+ export declare class BaseClient<D extends Record<string, Repository<any>>> {
45
+ #private;
46
+ options: XataClientOptions;
47
+ db: D;
48
+ constructor(options: XataClientOptions, links: Links);
49
+ initObject<T>(table: string, object: object): T;
50
+ getBranch(): Promise<string>;
51
+ }
52
+ export {};