@xata.io/client 0.7.0 → 0.8.0
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/CHANGELOG.md +24 -0
- package/dist/api/client.js +22 -9
- package/dist/api/components.d.ts +7 -6
- package/dist/api/components.js +7 -6
- package/dist/client.d.ts +39 -0
- package/dist/client.js +124 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/namespace.d.ts +7 -0
- package/dist/namespace.js +6 -0
- package/dist/schema/filters.spec.js +3 -1
- package/dist/schema/index.d.ts +16 -2
- package/dist/schema/index.js +26 -6
- package/dist/schema/operators.d.ts +13 -1
- package/dist/schema/operators.js +17 -2
- package/dist/schema/record.d.ts +5 -5
- package/dist/schema/repository.d.ts +34 -48
- package/dist/schema/repository.js +57 -150
- package/dist/schema/selection.spec.js +2 -1
- package/dist/schema/sorting.spec.js +3 -1
- package/dist/search/index.d.ts +20 -0
- package/dist/search/index.js +30 -0
- package/dist/util/branches.d.ts +5 -0
- package/dist/util/branches.js +7 -0
- package/dist/util/config.d.ts +11 -0
- package/dist/util/config.js +121 -0
- package/dist/util/types.d.ts +3 -2
- package/package.json +5 -2
- package/dist/schema/config.d.ts +0 -4
- package/dist/schema/config.js +0 -83
package/CHANGELOG.md
CHANGED
@@ -1,5 +1,29 @@
|
|
1
1
|
# @xata.io/client
|
2
2
|
|
3
|
+
## 0.8.0
|
4
|
+
|
5
|
+
### Patch Changes
|
6
|
+
|
7
|
+
- bde908e: Refactor client builder
|
8
|
+
- ea3eef8: Make records returned by the API readonly
|
9
|
+
|
10
|
+
## 0.7.2
|
11
|
+
|
12
|
+
### Patch Changes
|
13
|
+
|
14
|
+
- 4803b6f: Memoize ApiClient namespaces
|
15
|
+
- 1f268d7: Add search in XataClient
|
16
|
+
- d58c3d9: Hide private helper utilities
|
17
|
+
- f3b731b: Expose branch resolution API
|
18
|
+
|
19
|
+
## 0.7.1
|
20
|
+
|
21
|
+
### Patch Changes
|
22
|
+
|
23
|
+
- 01aef78: Fix bundle for browsers
|
24
|
+
- 56be1fd: Allow sending updates with link object
|
25
|
+
- fc51771: Add includes operator helper methods
|
26
|
+
|
3
27
|
## 0.7.0
|
4
28
|
|
5
29
|
### Minor Changes
|
package/dist/api/client.js
CHANGED
@@ -10,10 +10,10 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
10
10
|
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");
|
11
11
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
12
12
|
};
|
13
|
-
var _XataApiClient_extraProps;
|
13
|
+
var _XataApiClient_extraProps, _XataApiClient_namespaces;
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
15
15
|
exports.XataApiClient = void 0;
|
16
|
-
const config_1 = require("../
|
16
|
+
const config_1 = require("../util/config");
|
17
17
|
const fetch_1 = require("../util/fetch");
|
18
18
|
const components_1 = require("./components");
|
19
19
|
const providers_1 = require("./providers");
|
@@ -21,6 +21,7 @@ class XataApiClient {
|
|
21
21
|
constructor(options) {
|
22
22
|
var _a, _b;
|
23
23
|
_XataApiClient_extraProps.set(this, void 0);
|
24
|
+
_XataApiClient_namespaces.set(this, {});
|
24
25
|
const provider = (_a = options.host) !== null && _a !== void 0 ? _a : 'production';
|
25
26
|
const apiKey = (_b = options === null || options === void 0 ? void 0 : options.apiKey) !== null && _b !== void 0 ? _b : (0, config_1.getAPIKey)();
|
26
27
|
if (!apiKey) {
|
@@ -34,26 +35,38 @@ class XataApiClient {
|
|
34
35
|
}, "f");
|
35
36
|
}
|
36
37
|
get user() {
|
37
|
-
|
38
|
+
if (!__classPrivateFieldGet(this, _XataApiClient_namespaces, "f").user)
|
39
|
+
__classPrivateFieldGet(this, _XataApiClient_namespaces, "f").user = new UserApi(__classPrivateFieldGet(this, _XataApiClient_extraProps, "f"));
|
40
|
+
return __classPrivateFieldGet(this, _XataApiClient_namespaces, "f").user;
|
38
41
|
}
|
39
42
|
get workspaces() {
|
40
|
-
|
43
|
+
if (!__classPrivateFieldGet(this, _XataApiClient_namespaces, "f").workspaces)
|
44
|
+
__classPrivateFieldGet(this, _XataApiClient_namespaces, "f").workspaces = new WorkspaceApi(__classPrivateFieldGet(this, _XataApiClient_extraProps, "f"));
|
45
|
+
return __classPrivateFieldGet(this, _XataApiClient_namespaces, "f").workspaces;
|
41
46
|
}
|
42
47
|
get databases() {
|
43
|
-
|
48
|
+
if (!__classPrivateFieldGet(this, _XataApiClient_namespaces, "f").databases)
|
49
|
+
__classPrivateFieldGet(this, _XataApiClient_namespaces, "f").databases = new DatabaseApi(__classPrivateFieldGet(this, _XataApiClient_extraProps, "f"));
|
50
|
+
return __classPrivateFieldGet(this, _XataApiClient_namespaces, "f").databases;
|
44
51
|
}
|
45
52
|
get branches() {
|
46
|
-
|
53
|
+
if (!__classPrivateFieldGet(this, _XataApiClient_namespaces, "f").branches)
|
54
|
+
__classPrivateFieldGet(this, _XataApiClient_namespaces, "f").branches = new BranchApi(__classPrivateFieldGet(this, _XataApiClient_extraProps, "f"));
|
55
|
+
return __classPrivateFieldGet(this, _XataApiClient_namespaces, "f").branches;
|
47
56
|
}
|
48
57
|
get tables() {
|
49
|
-
|
58
|
+
if (!__classPrivateFieldGet(this, _XataApiClient_namespaces, "f").tables)
|
59
|
+
__classPrivateFieldGet(this, _XataApiClient_namespaces, "f").tables = new TableApi(__classPrivateFieldGet(this, _XataApiClient_extraProps, "f"));
|
60
|
+
return __classPrivateFieldGet(this, _XataApiClient_namespaces, "f").tables;
|
50
61
|
}
|
51
62
|
get records() {
|
52
|
-
|
63
|
+
if (!__classPrivateFieldGet(this, _XataApiClient_namespaces, "f").records)
|
64
|
+
__classPrivateFieldGet(this, _XataApiClient_namespaces, "f").records = new RecordsApi(__classPrivateFieldGet(this, _XataApiClient_extraProps, "f"));
|
65
|
+
return __classPrivateFieldGet(this, _XataApiClient_namespaces, "f").records;
|
53
66
|
}
|
54
67
|
}
|
55
68
|
exports.XataApiClient = XataApiClient;
|
56
|
-
_XataApiClient_extraProps = new WeakMap();
|
69
|
+
_XataApiClient_extraProps = new WeakMap(), _XataApiClient_namespaces = new WeakMap();
|
57
70
|
class UserApi {
|
58
71
|
constructor(extraProps) {
|
59
72
|
this.extraProps = extraProps;
|
package/dist/api/components.d.ts
CHANGED
@@ -990,8 +990,9 @@ export declare type QueryTableVariables = {
|
|
990
990
|
* },
|
991
991
|
* {
|
992
992
|
* "name": "r2",
|
993
|
-
* }
|
994
|
-
* ]
|
993
|
+
* }
|
994
|
+
* ]
|
995
|
+
* }
|
995
996
|
* }
|
996
997
|
* ```
|
997
998
|
*
|
@@ -1001,7 +1002,7 @@ export declare type QueryTableVariables = {
|
|
1001
1002
|
* {
|
1002
1003
|
* "filter": {
|
1003
1004
|
* "$exists": "settings",
|
1004
|
-
* }
|
1005
|
+
* }
|
1005
1006
|
* }
|
1006
1007
|
* ```
|
1007
1008
|
*
|
@@ -1016,8 +1017,8 @@ export declare type QueryTableVariables = {
|
|
1016
1017
|
* },
|
1017
1018
|
* {
|
1018
1019
|
* "$exists": "name",
|
1019
|
-
* }
|
1020
|
-
* ]
|
1020
|
+
* }
|
1021
|
+
* ]
|
1021
1022
|
* }
|
1022
1023
|
* }
|
1023
1024
|
* ```
|
@@ -1028,7 +1029,7 @@ export declare type QueryTableVariables = {
|
|
1028
1029
|
* {
|
1029
1030
|
* "filter": {
|
1030
1031
|
* "$notExists": "settings",
|
1031
|
-
* }
|
1032
|
+
* }
|
1032
1033
|
* }
|
1033
1034
|
* ```
|
1034
1035
|
*
|
package/dist/api/components.js
CHANGED
@@ -573,8 +573,9 @@ exports.bulkInsertTableRecords = bulkInsertTableRecords;
|
|
573
573
|
* },
|
574
574
|
* {
|
575
575
|
* "name": "r2",
|
576
|
-
* }
|
577
|
-
* ]
|
576
|
+
* }
|
577
|
+
* ]
|
578
|
+
* }
|
578
579
|
* }
|
579
580
|
* ```
|
580
581
|
*
|
@@ -584,7 +585,7 @@ exports.bulkInsertTableRecords = bulkInsertTableRecords;
|
|
584
585
|
* {
|
585
586
|
* "filter": {
|
586
587
|
* "$exists": "settings",
|
587
|
-
* }
|
588
|
+
* }
|
588
589
|
* }
|
589
590
|
* ```
|
590
591
|
*
|
@@ -599,8 +600,8 @@ exports.bulkInsertTableRecords = bulkInsertTableRecords;
|
|
599
600
|
* },
|
600
601
|
* {
|
601
602
|
* "$exists": "name",
|
602
|
-
* }
|
603
|
-
* ]
|
603
|
+
* }
|
604
|
+
* ]
|
604
605
|
* }
|
605
606
|
* }
|
606
607
|
* ```
|
@@ -611,7 +612,7 @@ exports.bulkInsertTableRecords = bulkInsertTableRecords;
|
|
611
612
|
* {
|
612
613
|
* "filter": {
|
613
614
|
* "$notExists": "settings",
|
614
|
-
* }
|
615
|
+
* }
|
615
616
|
* }
|
616
617
|
* ```
|
617
618
|
*
|
package/dist/client.d.ts
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
import { FetchImpl } from './api/fetcher';
|
2
|
+
import { Namespace } from './namespace';
|
3
|
+
import { SchemaNamespace } from './schema';
|
4
|
+
import { BaseData } from './schema/record';
|
5
|
+
import { LinkDictionary } from './schema/repository';
|
6
|
+
import { SearchNamespace } from './search';
|
7
|
+
import { BranchStrategyOption } from './util/branches';
|
8
|
+
import { StringKeys } from './util/types';
|
9
|
+
export declare type BaseClientOptions = {
|
10
|
+
fetch?: FetchImpl;
|
11
|
+
apiKey?: string;
|
12
|
+
databaseURL?: string;
|
13
|
+
branch?: BranchStrategyOption;
|
14
|
+
};
|
15
|
+
export declare const buildClientWithNamespaces: <ExternalNamespaces extends Record<string, Namespace>>(namespaces: ExternalNamespaces) => <Schemas extends Record<string, BaseData>>() => WrapperConstructor<Schemas, {
|
16
|
+
db: SchemaNamespace<Schemas>;
|
17
|
+
search: SearchNamespace<Schemas>;
|
18
|
+
}, ExternalNamespaces>;
|
19
|
+
export declare const buildClient: <Schemas extends Record<string, BaseData>, ExternalNamespaces extends Record<string, Namespace> = {}, Namespaces extends Record<string, Namespace> = {
|
20
|
+
db: SchemaNamespace<Schemas>;
|
21
|
+
search: SearchNamespace<Schemas>;
|
22
|
+
}>(external?: ExternalNamespaces | undefined) => WrapperConstructor<Schemas, Namespaces, ExternalNamespaces>;
|
23
|
+
export interface WrapperConstructor<Schemas extends Record<string, BaseData> = Record<string, any>, Namespaces extends Record<string, Namespace> = {
|
24
|
+
db: SchemaNamespace<Schemas>;
|
25
|
+
search: SearchNamespace<Schemas>;
|
26
|
+
}, ExternalNamespaces extends Record<string, Namespace> = Record<string, Namespace>> {
|
27
|
+
new (options?: Partial<BaseClientOptions>, links?: LinkDictionary): {
|
28
|
+
[Key in StringKeys<Namespaces>]: ReturnType<Namespaces[Key]['build']>;
|
29
|
+
} & {
|
30
|
+
[Key in StringKeys<NonNullable<ExternalNamespaces>>]: ReturnType<NonNullable<ExternalNamespaces>[Key]['build']>;
|
31
|
+
};
|
32
|
+
}
|
33
|
+
declare const BaseClient_base: WrapperConstructor<Record<string, any>, {
|
34
|
+
db: SchemaNamespace<Record<string, any>>;
|
35
|
+
search: SearchNamespace<Record<string, any>>;
|
36
|
+
}, {}>;
|
37
|
+
export declare class BaseClient extends BaseClient_base {
|
38
|
+
}
|
39
|
+
export {};
|
package/dist/client.js
ADDED
@@ -0,0 +1,124 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
+
});
|
10
|
+
};
|
11
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
12
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
13
|
+
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");
|
14
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
15
|
+
};
|
16
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
17
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
18
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
19
|
+
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");
|
20
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
21
|
+
};
|
22
|
+
var __asyncValues = (this && this.__asyncValues) || function (o) {
|
23
|
+
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
24
|
+
var m = o[Symbol.asyncIterator], i;
|
25
|
+
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);
|
26
|
+
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); }); }; }
|
27
|
+
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
|
28
|
+
};
|
29
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
30
|
+
exports.BaseClient = exports.buildClient = exports.buildClientWithNamespaces = void 0;
|
31
|
+
const schema_1 = require("./schema");
|
32
|
+
const search_1 = require("./search");
|
33
|
+
const branches_1 = require("./util/branches");
|
34
|
+
const config_1 = require("./util/config");
|
35
|
+
const fetch_1 = require("./util/fetch");
|
36
|
+
const buildClientWithNamespaces = (namespaces) => () => (0, exports.buildClient)(namespaces);
|
37
|
+
exports.buildClientWithNamespaces = buildClientWithNamespaces;
|
38
|
+
const buildClient = (external) => {
|
39
|
+
var _instances, _branch, _parseOptions, _getFetchProps, _evaluateBranch, _a;
|
40
|
+
return _a = class {
|
41
|
+
constructor(options = {}, links) {
|
42
|
+
_instances.add(this);
|
43
|
+
_branch.set(this, void 0);
|
44
|
+
const safeOptions = __classPrivateFieldGet(this, _instances, "m", _parseOptions).call(this, options);
|
45
|
+
const namespaces = Object.assign({ db: new schema_1.SchemaNamespace(links), search: new search_1.SearchNamespace() }, external);
|
46
|
+
for (const [key, namespace] of Object.entries(namespaces)) {
|
47
|
+
if (!namespace)
|
48
|
+
continue;
|
49
|
+
// @ts-ignore
|
50
|
+
this[key] = namespace.build({ getFetchProps: () => __classPrivateFieldGet(this, _instances, "m", _getFetchProps).call(this, safeOptions) });
|
51
|
+
}
|
52
|
+
}
|
53
|
+
},
|
54
|
+
_branch = new WeakMap(),
|
55
|
+
_instances = new WeakSet(),
|
56
|
+
_parseOptions = function _parseOptions(options) {
|
57
|
+
const fetch = (0, fetch_1.getFetchImplementation)(options === null || options === void 0 ? void 0 : options.fetch);
|
58
|
+
const databaseURL = (options === null || options === void 0 ? void 0 : options.databaseURL) || (0, config_1.getDatabaseURL)();
|
59
|
+
const apiKey = (options === null || options === void 0 ? void 0 : options.apiKey) || (0, config_1.getAPIKey)();
|
60
|
+
const branch = () => __awaiter(this, void 0, void 0, function* () {
|
61
|
+
return (options === null || options === void 0 ? void 0 : options.branch)
|
62
|
+
? yield __classPrivateFieldGet(this, _instances, "m", _evaluateBranch).call(this, options.branch)
|
63
|
+
: yield (0, config_1.getCurrentBranchName)({ apiKey, databaseURL, fetchImpl: options === null || options === void 0 ? void 0 : options.fetch });
|
64
|
+
});
|
65
|
+
if (!databaseURL || !apiKey) {
|
66
|
+
throw new Error('Options databaseURL and apiKey are required');
|
67
|
+
}
|
68
|
+
return { fetch, databaseURL, apiKey, branch };
|
69
|
+
},
|
70
|
+
_getFetchProps = function _getFetchProps({ fetch, apiKey, databaseURL, branch }) {
|
71
|
+
return __awaiter(this, void 0, void 0, function* () {
|
72
|
+
const branchValue = yield __classPrivateFieldGet(this, _instances, "m", _evaluateBranch).call(this, branch);
|
73
|
+
if (!branchValue)
|
74
|
+
throw new Error('Unable to resolve branch value');
|
75
|
+
return {
|
76
|
+
fetchImpl: fetch,
|
77
|
+
apiKey,
|
78
|
+
apiUrl: '',
|
79
|
+
// Instead of using workspace and dbBranch, we inject a probably CNAME'd URL
|
80
|
+
workspacesApiUrl: (path, params) => {
|
81
|
+
var _a;
|
82
|
+
const hasBranch = (_a = params.dbBranchName) !== null && _a !== void 0 ? _a : params.branch;
|
83
|
+
const newPath = path.replace(/^\/db\/[^/]+/, hasBranch ? `:${branchValue}` : '');
|
84
|
+
return databaseURL + newPath;
|
85
|
+
}
|
86
|
+
};
|
87
|
+
});
|
88
|
+
},
|
89
|
+
_evaluateBranch = function _evaluateBranch(param) {
|
90
|
+
var e_1, _a;
|
91
|
+
return __awaiter(this, void 0, void 0, function* () {
|
92
|
+
if (__classPrivateFieldGet(this, _branch, "f"))
|
93
|
+
return __classPrivateFieldGet(this, _branch, "f");
|
94
|
+
if (!param)
|
95
|
+
return undefined;
|
96
|
+
const strategies = Array.isArray(param) ? [...param] : [param];
|
97
|
+
const evaluateBranch = (strategy) => __awaiter(this, void 0, void 0, function* () {
|
98
|
+
return (0, branches_1.isBranchStrategyBuilder)(strategy) ? yield strategy() : strategy;
|
99
|
+
});
|
100
|
+
try {
|
101
|
+
for (var strategies_1 = __asyncValues(strategies), strategies_1_1; strategies_1_1 = yield strategies_1.next(), !strategies_1_1.done;) {
|
102
|
+
const strategy = strategies_1_1.value;
|
103
|
+
const branch = yield evaluateBranch(strategy);
|
104
|
+
if (branch) {
|
105
|
+
__classPrivateFieldSet(this, _branch, branch, "f");
|
106
|
+
return branch;
|
107
|
+
}
|
108
|
+
}
|
109
|
+
}
|
110
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
111
|
+
finally {
|
112
|
+
try {
|
113
|
+
if (strategies_1_1 && !strategies_1_1.done && (_a = strategies_1.return)) yield _a.call(strategies_1);
|
114
|
+
}
|
115
|
+
finally { if (e_1) throw e_1.error; }
|
116
|
+
}
|
117
|
+
});
|
118
|
+
},
|
119
|
+
_a;
|
120
|
+
};
|
121
|
+
exports.buildClient = buildClient;
|
122
|
+
class BaseClient extends (0, exports.buildClient)() {
|
123
|
+
}
|
124
|
+
exports.BaseClient = BaseClient;
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
@@ -23,4 +23,7 @@ class XataError extends Error {
|
|
23
23
|
}
|
24
24
|
exports.XataError = XataError;
|
25
25
|
__exportStar(require("./api"), exports);
|
26
|
+
__exportStar(require("./client"), exports);
|
26
27
|
__exportStar(require("./schema"), exports);
|
28
|
+
__exportStar(require("./search"), exports);
|
29
|
+
__exportStar(require("./util/config"), exports);
|
@@ -1,5 +1,7 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
4
|
+
const vitest_1 = require("vitest");
|
3
5
|
// Single column with implicit is
|
4
6
|
const singleColumnWithImplicitIs = { name: 'r2' };
|
5
7
|
// Single column with explicit is
|
@@ -170,6 +172,6 @@ const filterWithInvalidNestedObjectPropertyType = { settings: { plan: 42 } };
|
|
170
172
|
// Filter with invalid property $is type
|
171
173
|
// @ts-expect-error
|
172
174
|
const filterWithInvalidOperator = { name: { $is: 42 } };
|
173
|
-
test('fake test', () => {
|
175
|
+
(0, vitest_1.test)('fake test', () => {
|
174
176
|
// This is a fake test to make sure that the type definitions in this file are working
|
175
177
|
});
|
package/dist/schema/index.d.ts
CHANGED
@@ -1,7 +1,21 @@
|
|
1
|
+
import { Namespace, NamespaceBuildOptions } from '../namespace';
|
2
|
+
import { BaseData } from './record';
|
3
|
+
import { LinkDictionary, Repository } from './repository';
|
1
4
|
export * from './operators';
|
2
5
|
export * from './pagination';
|
3
6
|
export { Query } from './query';
|
4
7
|
export { isIdentifiable, isXataRecord } from './record';
|
5
8
|
export type { Identifiable, XataRecord } from './record';
|
6
|
-
export {
|
7
|
-
export type
|
9
|
+
export { Repository, RestRepository } from './repository';
|
10
|
+
export declare type SchemaDefinition = {
|
11
|
+
table: string;
|
12
|
+
links?: LinkDictionary;
|
13
|
+
};
|
14
|
+
export declare type SchemaNamespaceResult<Schemas extends Record<string, BaseData>> = {
|
15
|
+
[Key in keyof Schemas]: Repository<Schemas[Key]>;
|
16
|
+
};
|
17
|
+
export declare class SchemaNamespace<Schemas extends Record<string, BaseData>> extends Namespace {
|
18
|
+
private links?;
|
19
|
+
constructor(links?: LinkDictionary | undefined);
|
20
|
+
build(options: NamespaceBuildOptions): SchemaNamespaceResult<Schemas>;
|
21
|
+
}
|
package/dist/schema/index.js
CHANGED
@@ -14,7 +14,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
15
15
|
};
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
17
|
-
exports.
|
17
|
+
exports.SchemaNamespace = exports.RestRepository = exports.Repository = exports.isXataRecord = exports.isIdentifiable = exports.Query = void 0;
|
18
|
+
const namespace_1 = require("../namespace");
|
19
|
+
const lang_1 = require("../util/lang");
|
20
|
+
const repository_1 = require("./repository");
|
18
21
|
__exportStar(require("./operators"), exports);
|
19
22
|
__exportStar(require("./pagination"), exports);
|
20
23
|
var query_1 = require("./query");
|
@@ -22,8 +25,25 @@ Object.defineProperty(exports, "Query", { enumerable: true, get: function () { r
|
|
22
25
|
var record_1 = require("./record");
|
23
26
|
Object.defineProperty(exports, "isIdentifiable", { enumerable: true, get: function () { return record_1.isIdentifiable; } });
|
24
27
|
Object.defineProperty(exports, "isXataRecord", { enumerable: true, get: function () { return record_1.isXataRecord; } });
|
25
|
-
var
|
26
|
-
Object.defineProperty(exports, "
|
27
|
-
Object.defineProperty(exports, "
|
28
|
-
|
29
|
-
|
28
|
+
var repository_2 = require("./repository");
|
29
|
+
Object.defineProperty(exports, "Repository", { enumerable: true, get: function () { return repository_2.Repository; } });
|
30
|
+
Object.defineProperty(exports, "RestRepository", { enumerable: true, get: function () { return repository_2.RestRepository; } });
|
31
|
+
class SchemaNamespace extends namespace_1.Namespace {
|
32
|
+
constructor(links) {
|
33
|
+
super();
|
34
|
+
this.links = links;
|
35
|
+
}
|
36
|
+
build(options) {
|
37
|
+
const { getFetchProps } = options;
|
38
|
+
const links = this.links;
|
39
|
+
const schemaNamespace = new Proxy({}, {
|
40
|
+
get: (_target, table) => {
|
41
|
+
if (!(0, lang_1.isString)(table))
|
42
|
+
throw new Error('Invalid table name');
|
43
|
+
return new repository_1.RestRepository({ schemaNamespace, getFetchProps, table, links });
|
44
|
+
}
|
45
|
+
});
|
46
|
+
return schemaNamespace;
|
47
|
+
}
|
48
|
+
}
|
49
|
+
exports.SchemaNamespace = SchemaNamespace;
|
@@ -57,6 +57,18 @@ export declare const isNot: <T>(value: T) => PropertyFilter<T>;
|
|
57
57
|
*/
|
58
58
|
export declare const contains: (value: string) => StringTypeFilter;
|
59
59
|
/**
|
60
|
-
* Operator to restrict results
|
60
|
+
* Operator to restrict results if some array items match the predicate.
|
61
61
|
*/
|
62
62
|
export declare const includes: <T>(value: T) => ArrayFilter<T>;
|
63
|
+
/**
|
64
|
+
* Operator to restrict results if all array items match the predicate.
|
65
|
+
*/
|
66
|
+
export declare const includesAll: <T>(value: T) => ArrayFilter<T>;
|
67
|
+
/**
|
68
|
+
* Operator to restrict results if none array items match the predicate.
|
69
|
+
*/
|
70
|
+
export declare const includesNone: <T>(value: T) => ArrayFilter<T>;
|
71
|
+
/**
|
72
|
+
* Operator to restrict results if some array items match the predicate.
|
73
|
+
*/
|
74
|
+
export declare const includesAny: <T>(value: T) => ArrayFilter<T>;
|
package/dist/schema/operators.js
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.includes = exports.contains = exports.isNot = exports.is = exports.pattern = exports.endsWith = exports.startsWith = exports.notExists = exports.exists = exports.le = exports.lte = exports.lt = exports.gte = exports.ge = exports.gt = void 0;
|
3
|
+
exports.includesAny = exports.includesNone = exports.includesAll = exports.includes = exports.contains = exports.isNot = exports.is = exports.pattern = exports.endsWith = exports.startsWith = exports.notExists = exports.exists = exports.le = exports.lte = exports.lt = exports.gte = exports.ge = exports.gt = void 0;
|
4
4
|
/**
|
5
5
|
* Operator to restrict results to only values that are greater than the given value.
|
6
6
|
*/
|
@@ -72,7 +72,22 @@ exports.isNot = isNot;
|
|
72
72
|
const contains = (value) => ({ $contains: value });
|
73
73
|
exports.contains = contains;
|
74
74
|
/**
|
75
|
-
* Operator to restrict results
|
75
|
+
* Operator to restrict results if some array items match the predicate.
|
76
76
|
*/
|
77
77
|
const includes = (value) => ({ $includes: value });
|
78
78
|
exports.includes = includes;
|
79
|
+
/**
|
80
|
+
* Operator to restrict results if all array items match the predicate.
|
81
|
+
*/
|
82
|
+
const includesAll = (value) => ({ $includesAll: value });
|
83
|
+
exports.includesAll = includesAll;
|
84
|
+
/**
|
85
|
+
* Operator to restrict results if none array items match the predicate.
|
86
|
+
*/
|
87
|
+
const includesNone = (value) => ({ $includesNone: value });
|
88
|
+
exports.includesNone = includesNone;
|
89
|
+
/**
|
90
|
+
* Operator to restrict results if some array items match the predicate.
|
91
|
+
*/
|
92
|
+
const includesAny = (value) => ({ $includesAny: value });
|
93
|
+
exports.includesAny = includesAny;
|
package/dist/schema/record.d.ts
CHANGED
@@ -27,14 +27,14 @@ export interface XataRecord extends Identifiable {
|
|
27
27
|
/**
|
28
28
|
* Retrieves a refreshed copy of the current record from the database.
|
29
29
|
*/
|
30
|
-
read(): Promise<SelectedPick<this, ['*']
|
30
|
+
read(): Promise<Readonly<SelectedPick<this, ['*']>> | null>;
|
31
31
|
/**
|
32
32
|
* Performs a partial update of the current record. On success a new object is
|
33
33
|
* returned and the current object is not mutated.
|
34
34
|
* @param data The columns and their values that have to be updated.
|
35
35
|
* @returns A new record containing the latest values for all the columns of the current record.
|
36
36
|
*/
|
37
|
-
update(
|
37
|
+
update(partialUpdate: Partial<EditableData<Omit<this, keyof XataRecord>>>): Promise<Readonly<SelectedPick<this, ['*']>>>;
|
38
38
|
/**
|
39
39
|
* Performs a deletion of the current record in the database.
|
40
40
|
*
|
@@ -46,14 +46,14 @@ export declare type Link<Record extends XataRecord> = Omit<XataRecord, 'read' |
|
|
46
46
|
/**
|
47
47
|
* Retrieves a refreshed copy of the current record from the database.
|
48
48
|
*/
|
49
|
-
read(): Promise<SelectedPick<Record, ['*']
|
49
|
+
read(): Promise<Readonly<SelectedPick<Record, ['*']>> | null>;
|
50
50
|
/**
|
51
51
|
* Performs a partial update of the current record. On success a new object is
|
52
52
|
* returned and the current object is not mutated.
|
53
53
|
* @param data The columns and their values that have to be updated.
|
54
54
|
* @returns A new record containing the latest values for all the columns of the current record.
|
55
55
|
*/
|
56
|
-
update(
|
56
|
+
update(partialUpdate: Partial<EditableData<Omit<Record, keyof XataRecord>>>): Promise<Readonly<SelectedPick<Record, ['*']>>>;
|
57
57
|
};
|
58
58
|
export declare function isIdentifiable(x: any): x is Identifiable & Record<string, unknown>;
|
59
59
|
export declare function isXataRecord(x: any): x is XataRecord & Record<string, unknown>;
|
@@ -62,5 +62,5 @@ export declare type EditableData<O extends BaseData> = {
|
|
62
62
|
id: string;
|
63
63
|
} : NonNullable<O[K]> extends XataRecord ? {
|
64
64
|
id: string;
|
65
|
-
} | undefined : O[K];
|
65
|
+
} | null | undefined : O[K];
|
66
66
|
};
|