@cubicweb/client 2.0.0 → 2.1.1
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/lib/api/Api.d.ts +4 -28
- package/lib/api/Api.d.ts.map +1 -1
- package/lib/api/Api.js +19 -65
- package/lib/api/Api.js.map +1 -1
- package/lib/api/Client.d.ts +1 -1
- package/lib/api/Client.d.ts.map +1 -1
- package/lib/api/Client.js +3 -2
- package/lib/api/Client.js.map +1 -1
- package/lib/api/Transaction.d.ts +9 -7
- package/lib/api/Transaction.d.ts.map +1 -1
- package/lib/api/Transaction.js +6 -2
- package/lib/api/Transaction.js.map +1 -1
- package/lib/schema/raw/Constraints.d.ts +44 -5
- package/lib/schema/raw/Constraints.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/api/Api.ts +36 -72
- package/src/api/Client.ts +3 -4
- package/src/api/Transaction.ts +9 -10
- package/src/schema/raw/Constraints.ts +53 -6
package/lib/api/Api.d.ts
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import { RawSchema } from "../schema/raw/Schema";
|
|
2
|
+
import { TransactionResult, Transaction } from "./Transaction";
|
|
2
3
|
/**
|
|
3
4
|
* Type representing an RQL request and its associated parameters.
|
|
4
5
|
*/
|
|
5
6
|
export type RQLQuery = [string, RQLParams];
|
|
7
|
+
export type RQLParamValue = string | number | boolean | null;
|
|
6
8
|
/**
|
|
7
9
|
* Type representing RQL parameters to send along a request.
|
|
8
10
|
*/
|
|
9
11
|
export interface RQLParams {
|
|
10
|
-
[key: string]:
|
|
12
|
+
[key: string]: RQLParamValue;
|
|
11
13
|
}
|
|
12
14
|
/**
|
|
13
15
|
* Type representing a row returned in a result set.
|
|
@@ -96,33 +98,7 @@ export default class Api {
|
|
|
96
98
|
* @returns A promise resolving to the current user
|
|
97
99
|
*/
|
|
98
100
|
currentUser(): Promise<CurrentUser>;
|
|
99
|
-
|
|
100
|
-
* Starts a new transaction.
|
|
101
|
-
*
|
|
102
|
-
* @returns A promise with the transaction uuid
|
|
103
|
-
*/
|
|
104
|
-
transactionBegin(): Promise<string>;
|
|
105
|
-
/**
|
|
106
|
-
* Executes a RQL request as part of a transaction identified by the given uuid.
|
|
107
|
-
*
|
|
108
|
-
* @param uuid The transaction's uuid
|
|
109
|
-
* @param query The RQL query to send
|
|
110
|
-
* @param params The additional parameters for the request
|
|
111
|
-
* @returns A promise with the request's result set
|
|
112
|
-
*/
|
|
113
|
-
transactionExecute(uuid: string, query: string, params: RQLParams): Promise<ResultSet | null>;
|
|
114
|
-
/**
|
|
115
|
-
* Commits the transaction identified by the given uuid.
|
|
116
|
-
*
|
|
117
|
-
* @param uuid The transaction's uuid
|
|
118
|
-
*/
|
|
119
|
-
transactionCommit(uuid: string): Promise<null>;
|
|
120
|
-
/**
|
|
121
|
-
* Rollbacks the transaction identified by the given uuid.
|
|
122
|
-
*
|
|
123
|
-
* @param uuid The transaction's uuid
|
|
124
|
-
*/
|
|
125
|
-
transactionRollback(uuid: string): Promise<null>;
|
|
101
|
+
executeTransaction(transaction: Transaction): Promise<TransactionResult>;
|
|
126
102
|
private handleUserErrors;
|
|
127
103
|
}
|
|
128
104
|
export {};
|
package/lib/api/Api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Api.d.ts","sourceRoot":"","sources":["../../src/api/Api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"Api.d.ts","sourceRoot":"","sources":["../../src/api/Api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EACL,iBAAiB,EACjB,WAAW,EAEZ,MAAM,eAAe,CAAC;AAEvB;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAE3C,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAC7D;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;AAE7D;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;AAEtC;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,KAAK,QAAQ,GAAG;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,QAAQ,CAAC;AAEb;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,OAAO,GAAG;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,kBAAkB,CAAS;IAEnC;;;;;;;;;OASG;gBACS,MAAM,EAAE,MAAM;IAS1B,IAAI,MAAM,WAET;IAED,OAAO,CAAC,WAAW;IAInB;;;;;;OAMG;IACG,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IAYnE;;;;OAIG;IACG,MAAM,IAAI,OAAO,CAAC,SAAS,CAAC;IAOlC;;;;;;OAMG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgB9D;;;;OAIG;IACG,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC;IAOnC,kBAAkB,CACtB,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,iBAAiB,CAAC;IA+B7B,OAAO,CAAC,gBAAgB;CAgBzB"}
|
package/lib/api/Api.js
CHANGED
|
@@ -10,6 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
const Errors_1 = require("../Errors");
|
|
13
|
+
const Transaction_1 = require("./Transaction");
|
|
13
14
|
/**
|
|
14
15
|
* Class used to handle requests to the CubicWeb API.
|
|
15
16
|
*
|
|
@@ -31,19 +32,12 @@ class Api {
|
|
|
31
32
|
*/
|
|
32
33
|
constructor(apiUrl) {
|
|
33
34
|
this._version = "v1";
|
|
34
|
-
this._transactionApiUrl = {
|
|
35
|
-
begin: "",
|
|
36
|
-
execute: "",
|
|
37
|
-
commit: "",
|
|
38
|
-
rollback: "",
|
|
39
|
-
};
|
|
40
35
|
this._apiUrl = apiUrl;
|
|
41
36
|
this._rqlApiUrl = this.getApiRoute("rql");
|
|
42
37
|
this._schemaApiUrl = this.getApiRoute("schema");
|
|
43
38
|
this._loginApiUrl = this.getApiRoute("login");
|
|
44
39
|
this._currentUserApiUrl = this.getApiRoute("current-user");
|
|
45
|
-
|
|
46
|
-
this.getApiRoute(`transaction/${k}`)));
|
|
40
|
+
this._transactionApiUrl = this.getApiRoute("transaction");
|
|
47
41
|
}
|
|
48
42
|
get apiUrl() {
|
|
49
43
|
return this._apiUrl;
|
|
@@ -123,74 +117,34 @@ class Api {
|
|
|
123
117
|
});
|
|
124
118
|
});
|
|
125
119
|
}
|
|
126
|
-
|
|
127
|
-
* Starts a new transaction.
|
|
128
|
-
*
|
|
129
|
-
* @returns A promise with the transaction uuid
|
|
130
|
-
*/
|
|
131
|
-
transactionBegin() {
|
|
132
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
133
|
-
return nonNullFetchApi(this._transactionApiUrl.begin, {
|
|
134
|
-
method: "POST",
|
|
135
|
-
credentials: "include",
|
|
136
|
-
});
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Executes a RQL request as part of a transaction identified by the given uuid.
|
|
141
|
-
*
|
|
142
|
-
* @param uuid The transaction's uuid
|
|
143
|
-
* @param query The RQL query to send
|
|
144
|
-
* @param params The additional parameters for the request
|
|
145
|
-
* @returns A promise with the request's result set
|
|
146
|
-
*/
|
|
147
|
-
transactionExecute(uuid, query, params) {
|
|
148
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
149
|
-
try {
|
|
150
|
-
return yield fetchApi(this._transactionApiUrl.execute, {
|
|
151
|
-
method: "POST",
|
|
152
|
-
body: JSON.stringify({ uuid, query, params }),
|
|
153
|
-
credentials: "include",
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
catch (e) {
|
|
157
|
-
this.handleUserErrors(e);
|
|
158
|
-
}
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* Commits the transaction identified by the given uuid.
|
|
163
|
-
*
|
|
164
|
-
* @param uuid The transaction's uuid
|
|
165
|
-
*/
|
|
166
|
-
transactionCommit(uuid) {
|
|
120
|
+
executeTransaction(transaction) {
|
|
167
121
|
return __awaiter(this, void 0, void 0, function* () {
|
|
122
|
+
const data = transaction.queries.map((transactionQuery) => ({
|
|
123
|
+
query: transactionQuery.query,
|
|
124
|
+
params: Object.fromEntries(Object.entries(transactionQuery.params).map(([key, value]) => [
|
|
125
|
+
key,
|
|
126
|
+
(0, Transaction_1.isTransactionQueryRef)(value)
|
|
127
|
+
? {
|
|
128
|
+
queryIndex: value.queryIndex,
|
|
129
|
+
row: value.row,
|
|
130
|
+
column: value.column,
|
|
131
|
+
}
|
|
132
|
+
: value,
|
|
133
|
+
])),
|
|
134
|
+
}));
|
|
168
135
|
try {
|
|
169
|
-
|
|
136
|
+
const resultSets = yield nonNullFetchApi(this._transactionApiUrl, {
|
|
170
137
|
method: "POST",
|
|
171
|
-
body: JSON.stringify({ uuid }),
|
|
172
138
|
credentials: "include",
|
|
139
|
+
body: JSON.stringify(data),
|
|
173
140
|
});
|
|
141
|
+
return new Transaction_1.TransactionResult(resultSets);
|
|
174
142
|
}
|
|
175
143
|
catch (e) {
|
|
176
144
|
this.handleUserErrors(e);
|
|
177
145
|
}
|
|
178
146
|
});
|
|
179
147
|
}
|
|
180
|
-
/**
|
|
181
|
-
* Rollbacks the transaction identified by the given uuid.
|
|
182
|
-
*
|
|
183
|
-
* @param uuid The transaction's uuid
|
|
184
|
-
*/
|
|
185
|
-
transactionRollback(uuid) {
|
|
186
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
187
|
-
return fetchApi(this._transactionApiUrl.rollback, {
|
|
188
|
-
method: "POST",
|
|
189
|
-
body: JSON.stringify({ uuid }),
|
|
190
|
-
credentials: "include",
|
|
191
|
-
});
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
148
|
handleUserErrors(error) {
|
|
195
149
|
if (typeof error === "object" &&
|
|
196
150
|
error !== null &&
|
package/lib/api/Api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Api.js","sourceRoot":"","sources":["../../src/api/Api.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,sCAA4C;
|
|
1
|
+
{"version":3,"file":"Api.js","sourceRoot":"","sources":["../../src/api/Api.ts"],"names":[],"mappings":"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"}
|
package/lib/api/Client.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ export default class Client {
|
|
|
14
14
|
* Example: if you can retrieve the schema with https://example.com/api/v1/schema,
|
|
15
15
|
* use https://example.com/api as `apiUrl`.
|
|
16
16
|
*/
|
|
17
|
-
constructor(apiUrl: string,
|
|
17
|
+
constructor(apiUrl: string, options?: {
|
|
18
18
|
transactionBackend?: TransactionBackend;
|
|
19
19
|
});
|
|
20
20
|
get apiUrl(): string;
|
package/lib/api/Client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Client.d.ts","sourceRoot":"","sources":["../../src/api/Client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAY,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC/D,OAAO,EAEL,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,eAAe,CAAC;AAEvB;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,MAAM;IACzB,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,kBAAkB,CAAqB;IAE/C;;;;;;OAMG;gBAED,MAAM,EAAE,MAAM,EACd,
|
|
1
|
+
{"version":3,"file":"Client.d.ts","sourceRoot":"","sources":["../../src/api/Client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAY,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAC/D,OAAO,EAEL,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,eAAe,CAAC;AAEvB;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,MAAM;IACzB,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,kBAAkB,CAAqB;IAE/C;;;;;;OAMG;gBAED,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;QAAE,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;KAAO;IAW3D,IAAI,MAAM,WAET;IAED;;;;;;OAMG;IACG,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,SAAc,GAAG,OAAO,CAAC,SAAS,CAAC;IAIxE;;;;OAIG;IACG,MAAM;IAKZ;;;;;;OAMG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAI3C;;;;OAIG;IACG,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC;IAIzC;;;OAGG;IACG,kBAAkB,CACtB,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,iBAAiB,CAAC;CAG9B"}
|
package/lib/api/Client.js
CHANGED
|
@@ -26,10 +26,11 @@ class Client {
|
|
|
26
26
|
* Example: if you can retrieve the schema with https://example.com/api/v1/schema,
|
|
27
27
|
* use https://example.com/api as `apiUrl`.
|
|
28
28
|
*/
|
|
29
|
-
constructor(apiUrl,
|
|
29
|
+
constructor(apiUrl, options = {}) {
|
|
30
30
|
this.api = new Api_1.default(apiUrl);
|
|
31
|
+
const { transactionBackend } = options;
|
|
31
32
|
if (transactionBackend === undefined) {
|
|
32
|
-
this.transactionBackend = new Transaction_1.NativeTransactionBackend();
|
|
33
|
+
this.transactionBackend = new Transaction_1.NativeTransactionBackend(this.api);
|
|
33
34
|
}
|
|
34
35
|
else {
|
|
35
36
|
this.transactionBackend = transactionBackend;
|
package/lib/api/Client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Client.js","sourceRoot":"","sources":["../../src/api/Client.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,qDAAkD;AAClD,gDAA+D;AAC/D,+CAKuB;AAEvB;;GAEG;AACH,MAAqB,MAAM;IAIzB;;;;;;OAMG;IACH,YACE,MAAc,EACd,
|
|
1
|
+
{"version":3,"file":"Client.js","sourceRoot":"","sources":["../../src/api/Client.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,qDAAkD;AAClD,gDAA+D;AAC/D,+CAKuB;AAEvB;;GAEG;AACH,MAAqB,MAAM;IAIzB;;;;;;OAMG;IACH,YACE,MAAc,EACd,UAAuD,EAAE;QAEzD,IAAI,CAAC,GAAG,GAAG,IAAI,aAAG,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC;QACvC,IAAI,kBAAkB,KAAK,SAAS,EAAE;YACpC,IAAI,CAAC,kBAAkB,GAAG,IAAI,sCAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAClE;aAAM;YACL,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;SAC9C;IACH,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;IACzB,CAAC;IAED;;;;;;OAMG;IACG,OAAO,CAAC,KAAa,EAAE,SAAoB,EAAE;;YACjD,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;KAAA;IAED;;;;OAIG;IACG,MAAM;;YACV,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YACvC,OAAO,IAAI,eAAM,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;KAAA;IAED;;;;;;OAMG;IACG,KAAK,CAAC,KAAa,EAAE,QAAgB;;YACzC,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC/C,CAAC;KAAA;IAED;;;;OAIG;IACG,WAAW;;YACf,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QACtC,CAAC;KAAA;IAED;;;OAGG;IACG,kBAAkB,CACtB,WAAwB;;YAExB,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC5D,CAAC;KAAA;CACF;AA9ED,yBA8EC"}
|
package/lib/api/Transaction.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { ResultSet } from "./Api";
|
|
1
|
+
import Api, { ResultSet, RQLParamValue } from "./Api";
|
|
2
2
|
export declare class Transaction {
|
|
3
3
|
private _queries;
|
|
4
|
-
push(query: string, params: Record<string,
|
|
4
|
+
push(query: string, params: Record<string, RQLParamValue | TransactionQueryRef>): TransactionQuery;
|
|
5
5
|
get queries(): ReadonlyArray<TransactionQuery>;
|
|
6
6
|
}
|
|
7
7
|
export declare class TransactionResult {
|
|
@@ -16,16 +16,18 @@ export interface TransactionQueryRef {
|
|
|
16
16
|
}
|
|
17
17
|
export declare class TransactionQuery {
|
|
18
18
|
readonly query: string;
|
|
19
|
-
readonly params: Record<string,
|
|
19
|
+
readonly params: Record<string, RQLParamValue | TransactionQueryRef>;
|
|
20
20
|
readonly index: number;
|
|
21
|
-
constructor(query: string, params: Record<string,
|
|
21
|
+
constructor(query: string, params: Record<string, RQLParamValue | TransactionQueryRef>, index: number);
|
|
22
22
|
ref(row?: number, column?: number): TransactionQueryRef;
|
|
23
23
|
}
|
|
24
|
-
export declare function isTransactionQueryRef(value:
|
|
24
|
+
export declare function isTransactionQueryRef(value: RQLParamValue | TransactionQueryRef): value is TransactionQueryRef;
|
|
25
25
|
export interface TransactionBackend {
|
|
26
26
|
execute(transaction: Transaction): Promise<TransactionResult>;
|
|
27
27
|
}
|
|
28
|
-
export declare class NativeTransactionBackend {
|
|
29
|
-
|
|
28
|
+
export declare class NativeTransactionBackend implements TransactionBackend {
|
|
29
|
+
private _api;
|
|
30
|
+
constructor(_api: Api);
|
|
31
|
+
execute(transaction: Transaction): Promise<TransactionResult>;
|
|
30
32
|
}
|
|
31
33
|
//# sourceMappingURL=Transaction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Transaction.d.ts","sourceRoot":"","sources":["../../src/api/Transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Transaction.d.ts","sourceRoot":"","sources":["../../src/api/Transaction.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtD,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAA+B;IAE/C,IAAI,CACF,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,mBAAmB,CAAC,GAC1D,gBAAgB;IAUnB,IAAI,OAAO,IAAI,aAAa,CAAC,gBAAgB,CAAC,CAE7C;CACF;AAED,qBAAa,iBAAiB;IAChB,OAAO,CAAC,UAAU;gBAAV,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC;IAExD,OAAO,CAAC,GAAG,EAAE,mBAAmB;CAGjC;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,gBAAgB;aAET,KAAK,EAAE,MAAM;aACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,mBAAmB,CAAC;aAC3D,KAAK,EAAE,MAAM;gBAFb,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,mBAAmB,CAAC,EAC3D,KAAK,EAAE,MAAM;IAG/B,GAAG,CAAC,GAAG,SAAI,EAAE,MAAM,SAAI,GAAG,mBAAmB;CAO9C;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,aAAa,GAAG,mBAAmB,GACzC,KAAK,IAAI,mBAAmB,CAQ9B;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC/D;AAED,qBAAa,wBAAyB,YAAW,kBAAkB;IACrD,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,GAAG;IACvB,OAAO,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAGpE"}
|
package/lib/api/Transaction.js
CHANGED
|
@@ -50,13 +50,17 @@ class TransactionQuery {
|
|
|
50
50
|
exports.TransactionQuery = TransactionQuery;
|
|
51
51
|
function isTransactionQueryRef(value) {
|
|
52
52
|
return (typeof value === "object" &&
|
|
53
|
+
value !== null &&
|
|
53
54
|
["queryIndex", "row", "column"].every((key) => Object.keys(value).includes(key)));
|
|
54
55
|
}
|
|
55
56
|
exports.isTransactionQueryRef = isTransactionQueryRef;
|
|
56
57
|
class NativeTransactionBackend {
|
|
57
|
-
|
|
58
|
+
constructor(_api) {
|
|
59
|
+
this._api = _api;
|
|
60
|
+
}
|
|
61
|
+
execute(transaction) {
|
|
58
62
|
return __awaiter(this, void 0, void 0, function* () {
|
|
59
|
-
|
|
63
|
+
return this._api.executeTransaction(transaction);
|
|
60
64
|
});
|
|
61
65
|
}
|
|
62
66
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Transaction.js","sourceRoot":"","sources":["../../src/api/Transaction.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,MAAa,WAAW;IAAxB;QACU,aAAQ,GAA4B,EAAE,CAAC;IAkBjD,CAAC;IAhBC,IAAI,CACF,KAAa,EACb,
|
|
1
|
+
{"version":3,"file":"Transaction.js","sourceRoot":"","sources":["../../src/api/Transaction.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,MAAa,WAAW;IAAxB;QACU,aAAQ,GAA4B,EAAE,CAAC;IAkBjD,CAAC;IAhBC,IAAI,CACF,KAAa,EACb,MAA2D;QAE3D,MAAM,YAAY,GAAG,IAAI,gBAAgB,CACvC,KAAK,EACL,MAAM,EACN,IAAI,CAAC,QAAQ,CAAC,MAAM,CACrB,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACjC,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CACF;AAnBD,kCAmBC;AAED,MAAa,iBAAiB;IAC5B,YAAoB,UAAoC;QAApC,eAAU,GAAV,UAAU,CAA0B;IAAG,CAAC;IAE5D,OAAO,CAAC,GAAwB;QAC9B,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9D,CAAC;CACF;AAND,8CAMC;AAQD,MAAa,gBAAgB;IAC3B,YACkB,KAAa,EACb,MAA2D,EAC3D,KAAa;QAFb,UAAK,GAAL,KAAK,CAAQ;QACb,WAAM,GAAN,MAAM,CAAqD;QAC3D,UAAK,GAAL,KAAK,CAAQ;IAC5B,CAAC;IAEJ,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC;QACrB,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,KAAK;YACtB,GAAG;YACH,MAAM;SACP,CAAC;IACJ,CAAC;CACF;AAdD,4CAcC;AAED,SAAgB,qBAAqB,CACnC,KAA0C;IAE1C,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,CAAC,YAAY,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAC5C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CACjC,CACF,CAAC;AACJ,CAAC;AAVD,sDAUC;AAMD,MAAa,wBAAwB;IACnC,YAAoB,IAAS;QAAT,SAAI,GAAJ,IAAI,CAAK;IAAG,CAAC;IAC3B,OAAO,CAAC,WAAwB;;YACpC,OAAO,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;QACnD,CAAC;KAAA;CACF;AALD,4DAKC"}
|
|
@@ -5,10 +5,6 @@ type ConstraintBase<T extends string, V extends Record<string, unknown> | null>
|
|
|
5
5
|
type: T;
|
|
6
6
|
value: V;
|
|
7
7
|
};
|
|
8
|
-
/**
|
|
9
|
-
* All the possible operators inside a constraint.
|
|
10
|
-
*/
|
|
11
|
-
export type ConstraintOperator = ">" | ">=" | "<" | "<=";
|
|
12
8
|
/**
|
|
13
9
|
* THe type of a constraint message when one is present.
|
|
14
10
|
*/
|
|
@@ -26,8 +22,51 @@ export type RegexpConstraint = ConstraintBase<"RegexpConstraint", {
|
|
|
26
22
|
flags: number;
|
|
27
23
|
msg: ConstraintMessage;
|
|
28
24
|
}>;
|
|
25
|
+
/**
|
|
26
|
+
* Reference to an attribute used in constraints.
|
|
27
|
+
*
|
|
28
|
+
* @property \_\_attribute\_\_ name of the attribute in the same entity
|
|
29
|
+
*/
|
|
30
|
+
export interface Attribute {
|
|
31
|
+
__attribute__: string;
|
|
32
|
+
}
|
|
33
|
+
export interface TimeDelta {
|
|
34
|
+
days: number;
|
|
35
|
+
seconds: number;
|
|
36
|
+
microseconds: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Represents a date relative to the current date at the time of the check.
|
|
40
|
+
*
|
|
41
|
+
* @property \_\_today\_\_ always true
|
|
42
|
+
* @property offset delta to current date at the time of the check
|
|
43
|
+
* @property type name of the Python class used to do the comparison
|
|
44
|
+
*/
|
|
45
|
+
export interface Today {
|
|
46
|
+
__today__: true;
|
|
47
|
+
offset: TimeDelta | null;
|
|
48
|
+
type: "Datetime" | "TZDatetime" | "Date";
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Represents a datetime relative to the current datetime at the time of the check.
|
|
52
|
+
*
|
|
53
|
+
* @property \_\_now\_\_ always true
|
|
54
|
+
* @property offset delta to current date at the time of the check
|
|
55
|
+
*/
|
|
56
|
+
export interface Now {
|
|
57
|
+
__now__: true;
|
|
58
|
+
offset: TimeDelta;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* All the possible operators inside a constraint.
|
|
62
|
+
*/
|
|
63
|
+
export type ConstraintOperator = ">" | ">=" | "<" | "<=";
|
|
64
|
+
/**
|
|
65
|
+
* @property value.boundary boudary value to compare the attribut
|
|
66
|
+
*
|
|
67
|
+
*/
|
|
29
68
|
export type BoundaryConstraint = ConstraintBase<"BoundaryConstraint", {
|
|
30
|
-
boundary: number | null;
|
|
69
|
+
boundary: Attribute | Today | Now | number | null;
|
|
31
70
|
op: ConstraintOperator;
|
|
32
71
|
msg: ConstraintMessage;
|
|
33
72
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Constraints.d.ts","sourceRoot":"","sources":["../../../src/schema/raw/Constraints.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,KAAK,cAAc,CACjB,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,IACtC;IACF,IAAI,EAAE,CAAC,CAAC;IACR,KAAK,EAAE,CAAC,CAAC;CACV,CAAC;AAEF;;GAEG;AACH,
|
|
1
|
+
{"version":3,"file":"Constraints.d.ts","sourceRoot":"","sources":["../../../src/schema/raw/Constraints.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/api/Api.ts
CHANGED
|
@@ -1,16 +1,22 @@
|
|
|
1
1
|
import { ValidationError } from "../Errors";
|
|
2
2
|
import { RawSchema } from "../schema/raw/Schema";
|
|
3
|
+
import {
|
|
4
|
+
TransactionResult,
|
|
5
|
+
Transaction,
|
|
6
|
+
isTransactionQueryRef,
|
|
7
|
+
} from "./Transaction";
|
|
3
8
|
|
|
4
9
|
/**
|
|
5
10
|
* Type representing an RQL request and its associated parameters.
|
|
6
11
|
*/
|
|
7
12
|
export type RQLQuery = [string, RQLParams];
|
|
8
13
|
|
|
14
|
+
export type RQLParamValue = string | number | boolean | null;
|
|
9
15
|
/**
|
|
10
16
|
* Type representing RQL parameters to send along a request.
|
|
11
17
|
*/
|
|
12
18
|
export interface RQLParams {
|
|
13
|
-
[key: string]:
|
|
19
|
+
[key: string]: RQLParamValue;
|
|
14
20
|
}
|
|
15
21
|
|
|
16
22
|
/**
|
|
@@ -63,12 +69,7 @@ export default class Api {
|
|
|
63
69
|
private _schemaApiUrl: string;
|
|
64
70
|
private _loginApiUrl: string;
|
|
65
71
|
private _currentUserApiUrl: string;
|
|
66
|
-
private _transactionApiUrl
|
|
67
|
-
begin: "",
|
|
68
|
-
execute: "",
|
|
69
|
-
commit: "",
|
|
70
|
-
rollback: "",
|
|
71
|
-
};
|
|
72
|
+
private _transactionApiUrl: string;
|
|
72
73
|
|
|
73
74
|
/**
|
|
74
75
|
* Class used to handle requests to the CubicWeb API.
|
|
@@ -86,11 +87,7 @@ export default class Api {
|
|
|
86
87
|
this._schemaApiUrl = this.getApiRoute("schema");
|
|
87
88
|
this._loginApiUrl = this.getApiRoute("login");
|
|
88
89
|
this._currentUserApiUrl = this.getApiRoute("current-user");
|
|
89
|
-
|
|
90
|
-
(k) =>
|
|
91
|
-
(this._transactionApiUrl[k as keyof typeof this._transactionApiUrl] =
|
|
92
|
-
this.getApiRoute(`transaction/${k}`))
|
|
93
|
-
);
|
|
90
|
+
this._transactionApiUrl = this.getApiRoute("transaction");
|
|
94
91
|
}
|
|
95
92
|
|
|
96
93
|
get apiUrl() {
|
|
@@ -167,72 +164,39 @@ export default class Api {
|
|
|
167
164
|
});
|
|
168
165
|
}
|
|
169
166
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
* @returns A promise with the request's result set
|
|
189
|
-
*/
|
|
190
|
-
async transactionExecute(
|
|
191
|
-
uuid: string,
|
|
192
|
-
query: string,
|
|
193
|
-
params: RQLParams
|
|
194
|
-
): Promise<ResultSet | null> {
|
|
167
|
+
async executeTransaction(
|
|
168
|
+
transaction: Transaction
|
|
169
|
+
): Promise<TransactionResult> {
|
|
170
|
+
const data = transaction.queries.map((transactionQuery) => ({
|
|
171
|
+
query: transactionQuery.query,
|
|
172
|
+
params: Object.fromEntries(
|
|
173
|
+
Object.entries(transactionQuery.params).map(([key, value]) => [
|
|
174
|
+
key,
|
|
175
|
+
isTransactionQueryRef(value)
|
|
176
|
+
? {
|
|
177
|
+
queryIndex: value.queryIndex,
|
|
178
|
+
row: value.row,
|
|
179
|
+
column: value.column,
|
|
180
|
+
}
|
|
181
|
+
: value,
|
|
182
|
+
])
|
|
183
|
+
),
|
|
184
|
+
}));
|
|
195
185
|
try {
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
186
|
+
const resultSets = await nonNullFetchApi<ReadonlyArray<ResultSet>>(
|
|
187
|
+
this._transactionApiUrl,
|
|
188
|
+
{
|
|
189
|
+
method: "POST",
|
|
190
|
+
credentials: "include",
|
|
191
|
+
body: JSON.stringify(data),
|
|
192
|
+
}
|
|
193
|
+
);
|
|
194
|
+
return new TransactionResult(resultSets);
|
|
201
195
|
} catch (e) {
|
|
202
196
|
this.handleUserErrors(e);
|
|
203
197
|
}
|
|
204
198
|
}
|
|
205
199
|
|
|
206
|
-
/**
|
|
207
|
-
* Commits the transaction identified by the given uuid.
|
|
208
|
-
*
|
|
209
|
-
* @param uuid The transaction's uuid
|
|
210
|
-
*/
|
|
211
|
-
async transactionCommit(uuid: string): Promise<null> {
|
|
212
|
-
try {
|
|
213
|
-
return await fetchApi<null>(this._transactionApiUrl.commit, {
|
|
214
|
-
method: "POST",
|
|
215
|
-
body: JSON.stringify({ uuid }),
|
|
216
|
-
credentials: "include",
|
|
217
|
-
});
|
|
218
|
-
} catch (e) {
|
|
219
|
-
this.handleUserErrors(e);
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
/**
|
|
224
|
-
* Rollbacks the transaction identified by the given uuid.
|
|
225
|
-
*
|
|
226
|
-
* @param uuid The transaction's uuid
|
|
227
|
-
*/
|
|
228
|
-
async transactionRollback(uuid: string): Promise<null> {
|
|
229
|
-
return fetchApi<null>(this._transactionApiUrl.rollback, {
|
|
230
|
-
method: "POST",
|
|
231
|
-
body: JSON.stringify({ uuid }),
|
|
232
|
-
credentials: "include",
|
|
233
|
-
});
|
|
234
|
-
}
|
|
235
|
-
|
|
236
200
|
private handleUserErrors(error: unknown): never {
|
|
237
201
|
if (
|
|
238
202
|
typeof error === "object" &&
|
package/src/api/Client.ts
CHANGED
|
@@ -23,13 +23,12 @@ export default class Client {
|
|
|
23
23
|
*/
|
|
24
24
|
constructor(
|
|
25
25
|
apiUrl: string,
|
|
26
|
-
{
|
|
27
|
-
transactionBackend: transactionBackend,
|
|
28
|
-
}: { transactionBackend?: TransactionBackend }
|
|
26
|
+
options: { transactionBackend?: TransactionBackend } = {}
|
|
29
27
|
) {
|
|
30
28
|
this.api = new Api(apiUrl);
|
|
29
|
+
const { transactionBackend } = options;
|
|
31
30
|
if (transactionBackend === undefined) {
|
|
32
|
-
this.transactionBackend = new NativeTransactionBackend();
|
|
31
|
+
this.transactionBackend = new NativeTransactionBackend(this.api);
|
|
33
32
|
} else {
|
|
34
33
|
this.transactionBackend = transactionBackend;
|
|
35
34
|
}
|
package/src/api/Transaction.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { ResultSet } from "./Api";
|
|
1
|
+
import Api, { ResultSet, RQLParamValue } from "./Api";
|
|
2
2
|
|
|
3
3
|
export class Transaction {
|
|
4
4
|
private _queries: Array<TransactionQuery> = [];
|
|
5
5
|
|
|
6
6
|
push(
|
|
7
7
|
query: string,
|
|
8
|
-
params: Record<string,
|
|
8
|
+
params: Record<string, RQLParamValue | TransactionQueryRef>
|
|
9
9
|
): TransactionQuery {
|
|
10
10
|
const stackedQuery = new TransactionQuery(
|
|
11
11
|
query,
|
|
@@ -38,10 +38,7 @@ export interface TransactionQueryRef {
|
|
|
38
38
|
export class TransactionQuery {
|
|
39
39
|
constructor(
|
|
40
40
|
public readonly query: string,
|
|
41
|
-
public readonly params: Record<
|
|
42
|
-
string,
|
|
43
|
-
string | number | TransactionQueryRef
|
|
44
|
-
>,
|
|
41
|
+
public readonly params: Record<string, RQLParamValue | TransactionQueryRef>,
|
|
45
42
|
public readonly index: number
|
|
46
43
|
) {}
|
|
47
44
|
|
|
@@ -55,10 +52,11 @@ export class TransactionQuery {
|
|
|
55
52
|
}
|
|
56
53
|
|
|
57
54
|
export function isTransactionQueryRef(
|
|
58
|
-
value:
|
|
55
|
+
value: RQLParamValue | TransactionQueryRef
|
|
59
56
|
): value is TransactionQueryRef {
|
|
60
57
|
return (
|
|
61
58
|
typeof value === "object" &&
|
|
59
|
+
value !== null &&
|
|
62
60
|
["queryIndex", "row", "column"].every((key) =>
|
|
63
61
|
Object.keys(value).includes(key)
|
|
64
62
|
)
|
|
@@ -69,8 +67,9 @@ export interface TransactionBackend {
|
|
|
69
67
|
execute(transaction: Transaction): Promise<TransactionResult>;
|
|
70
68
|
}
|
|
71
69
|
|
|
72
|
-
export class NativeTransactionBackend {
|
|
73
|
-
|
|
74
|
-
|
|
70
|
+
export class NativeTransactionBackend implements TransactionBackend {
|
|
71
|
+
constructor(private _api: Api) {}
|
|
72
|
+
async execute(transaction: Transaction): Promise<TransactionResult> {
|
|
73
|
+
return this._api.executeTransaction(transaction);
|
|
75
74
|
}
|
|
76
75
|
}
|
|
@@ -9,11 +9,6 @@ type ConstraintBase<
|
|
|
9
9
|
value: V;
|
|
10
10
|
};
|
|
11
11
|
|
|
12
|
-
/**
|
|
13
|
-
* All the possible operators inside a constraint.
|
|
14
|
-
*/
|
|
15
|
-
export type ConstraintOperator = ">" | ">=" | "<" | "<=";
|
|
16
|
-
|
|
17
12
|
/**
|
|
18
13
|
* THe type of a constraint message when one is present.
|
|
19
14
|
*/
|
|
@@ -34,9 +29,61 @@ export type RegexpConstraint = ConstraintBase<
|
|
|
34
29
|
{ regexp: string; flags: number; msg: ConstraintMessage }
|
|
35
30
|
>;
|
|
36
31
|
|
|
32
|
+
/**
|
|
33
|
+
* Reference to an attribute used in constraints.
|
|
34
|
+
*
|
|
35
|
+
* @property \_\_attribute\_\_ name of the attribute in the same entity
|
|
36
|
+
*/
|
|
37
|
+
export interface Attribute {
|
|
38
|
+
__attribute__: string;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface TimeDelta {
|
|
42
|
+
days: number;
|
|
43
|
+
seconds: number;
|
|
44
|
+
microseconds: number;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Represents a date relative to the current date at the time of the check.
|
|
49
|
+
*
|
|
50
|
+
* @property \_\_today\_\_ always true
|
|
51
|
+
* @property offset delta to current date at the time of the check
|
|
52
|
+
* @property type name of the Python class used to do the comparison
|
|
53
|
+
*/
|
|
54
|
+
export interface Today {
|
|
55
|
+
__today__: true;
|
|
56
|
+
offset: TimeDelta | null;
|
|
57
|
+
type: "Datetime" | "TZDatetime" | "Date";
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Represents a datetime relative to the current datetime at the time of the check.
|
|
62
|
+
*
|
|
63
|
+
* @property \_\_now\_\_ always true
|
|
64
|
+
* @property offset delta to current date at the time of the check
|
|
65
|
+
*/
|
|
66
|
+
export interface Now {
|
|
67
|
+
__now__: true;
|
|
68
|
+
offset: TimeDelta;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* All the possible operators inside a constraint.
|
|
73
|
+
*/
|
|
74
|
+
export type ConstraintOperator = ">" | ">=" | "<" | "<=";
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* @property value.boundary boudary value to compare the attribut
|
|
78
|
+
*
|
|
79
|
+
*/
|
|
37
80
|
export type BoundaryConstraint = ConstraintBase<
|
|
38
81
|
"BoundaryConstraint",
|
|
39
|
-
{
|
|
82
|
+
{
|
|
83
|
+
boundary: Attribute | Today | Now | number | null;
|
|
84
|
+
op: ConstraintOperator;
|
|
85
|
+
msg: ConstraintMessage;
|
|
86
|
+
}
|
|
40
87
|
>;
|
|
41
88
|
export type IntervalBoundConstraint = ConstraintBase<
|
|
42
89
|
"IntervalBoundConstraint",
|