@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 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]: string | number;
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 {};
@@ -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;AAEjD;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;CAChC;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,CAKxB;IAEF;;;;;;;;;OASG;gBACS,MAAM,EAAE,MAAM;IAa1B,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;IAOzC;;;;OAIG;IACG,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAOzC;;;;;;;OAOG;IACG,kBAAkB,CACtB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAY5B;;;;OAIG;IACG,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYpD;;;;OAIG;IACG,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtD,OAAO,CAAC,gBAAgB;CAgBzB"}
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
- Object.keys(this._transactionApiUrl).forEach((k) => (this._transactionApiUrl[k] =
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
- return yield fetchApi(this._transactionApiUrl.commit, {
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 &&
@@ -1 +1 @@
1
- {"version":3,"file":"Api.js","sourceRoot":"","sources":["../../src/api/Api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Api.js","sourceRoot":"","sources":["../../src/api/Api.ts"],"names":[],"mappings":"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"}
@@ -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, { transactionBackend: transactionBackend, }: {
17
+ constructor(apiUrl: string, options?: {
18
18
  transactionBackend?: TransactionBackend;
19
19
  });
20
20
  get apiUrl(): string;
@@ -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,EACE,kBAAkB,EAAE,kBAAkB,GACvC,EAAE;QAAE,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;KAAE;IAUhD,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"}
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, { transactionBackend: transactionBackend, }) {
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;
@@ -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,EACE,kBAAkB,EAAE,kBAAkB,GACM;QAE9C,IAAI,CAAC,GAAG,GAAG,IAAI,aAAG,CAAC,MAAM,CAAC,CAAC;QAC3B,IAAI,kBAAkB,KAAK,SAAS,EAAE;YACpC,IAAI,CAAC,kBAAkB,GAAG,IAAI,sCAAwB,EAAE,CAAC;SAC1D;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;AA/ED,yBA+EC"}
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"}
@@ -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, string | number | TransactionQueryRef>): TransactionQuery;
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, string | number | TransactionQueryRef>;
19
+ readonly params: Record<string, RQLParamValue | TransactionQueryRef>;
20
20
  readonly index: number;
21
- constructor(query: string, params: Record<string, string | number | TransactionQueryRef>, index: number);
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: string | number | TransactionQueryRef): value is TransactionQueryRef;
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
- execute(): Promise<TransactionResult>;
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;AAElC,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAA+B;IAE/C,IAAI,CACF,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,mBAAmB,CAAC,GAC5D,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,CAC5B,MAAM,EACN,MAAM,GAAG,MAAM,GAAG,mBAAmB,CACtC;aACe,KAAK,EAAE,MAAM;gBALb,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,CAC5B,MAAM,EACN,MAAM,GAAG,MAAM,GAAG,mBAAmB,CACtC,EACe,KAAK,EAAE,MAAM;IAG/B,GAAG,CAAC,GAAG,SAAI,EAAE,MAAM,SAAI,GAAG,mBAAmB;CAO9C;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,mBAAmB,GAC3C,KAAK,IAAI,mBAAmB,CAO9B;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC/D;AAED,qBAAa,wBAAwB;IAC7B,OAAO,IAAI,OAAO,CAAC,iBAAiB,CAAC;CAG5C"}
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"}
@@ -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
- execute() {
58
+ constructor(_api) {
59
+ this._api = _api;
60
+ }
61
+ execute(transaction) {
58
62
  return __awaiter(this, void 0, void 0, function* () {
59
- throw new Error("NativeTransactionBackend.execute not yet implemented.");
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,MAA6D;QAE7D,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,MAGf,EACe,KAAa;QALb,UAAK,GAAL,KAAK,CAAQ;QACb,WAAM,GAAN,MAAM,CAGrB;QACe,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;AAjBD,4CAiBC;AAED,SAAgB,qBAAqB,CACnC,KAA4C;IAE5C,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,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;AATD,sDASC;AAMD,MAAa,wBAAwB;IAC7B,OAAO;;YACX,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,CAAC;KAAA;CACF;AAJD,4DAIC"}
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,MAAM,MAAM,kBAAkB,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC;AAEzD;;GAEG;AACH,KAAK,iBAAiB,GAAG,MAAM,GAAG,IAAI,CAAC;AAEvC,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAC3C,kBAAkB,EAClB;IAAE,GAAG,EAAE,iBAAiB,CAAA;CAAE,CAC3B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,cAAc,CACzC,gBAAgB,EAChB;IAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,GAAG,EAAE,iBAAiB,CAAA;CAAE,CACnE,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAC3C,kBAAkB,EAClB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,iBAAiB,CAAA;CAAE,CAC1D,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,cAAc,CAC7C,oBAAoB,EACpB;IAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,EAAE,EAAE,kBAAkB,CAAC;IAAC,GAAG,EAAE,iBAAiB,CAAA;CAAE,CAC5E,CAAC;AACF,MAAM,MAAM,uBAAuB,GAAG,cAAc,CAClD,yBAAyB,EACzB;IAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,GAAG,EAAE,iBAAiB,CAAA;CAAE,CAC7E,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,cAAc,CACrD,4BAA4B,EAC5B;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,EAAE,iBAAiB,CAAA;CAAE,CAC7C,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAC3C,kBAAkB,EAClB;IACE,MAAM,EAAE,CAAC,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IAClE,GAAG,EAAE,iBAAiB,CAAC;CACxB,CACF,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,cAAc,CAClD,yBAAyB,EACzB;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAC3C,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,cAAc,CACxC,eAAe,EACf;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,EAAE,iBAAiB,CAAA;CAAE,CACnE,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CACtC,gBAAgB,GAChB,cAAc,GACd,gBAAgB,GAChB,kBAAkB,GAClB,uBAAuB,GACvB,0BAA0B,GAC1B,gBAAgB,GAChB,aAAa,CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CACvC,uBAAuB,GAAG,aAAa,CACxC,CAAC"}
1
+ {"version":3,"file":"Constraints.d.ts","sourceRoot":"","sources":["../../../src/schema/raw/Constraints.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@cubicweb/client",
3
3
  "description": "Official JS client for CubicWeb API",
4
4
  "author": "Logilab",
5
- "version": "2.0.0",
5
+ "version": "2.1.1",
6
6
  "license": "LGPL-3.0-or-later",
7
7
  "main": "lib/index.js",
8
8
  "types": "lib/index.d.ts",
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]: string | number;
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
- Object.keys(this._transactionApiUrl).forEach(
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
- * Starts a new transaction.
172
- *
173
- * @returns A promise with the transaction uuid
174
- */
175
- async transactionBegin(): Promise<string> {
176
- return nonNullFetchApi<string>(this._transactionApiUrl.begin, {
177
- method: "POST",
178
- credentials: "include",
179
- });
180
- }
181
-
182
- /**
183
- * Executes a RQL request as part of a transaction identified by the given uuid.
184
- *
185
- * @param uuid The transaction's uuid
186
- * @param query The RQL query to send
187
- * @param params The additional parameters for the request
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
- return await fetchApi<ResultSet>(this._transactionApiUrl.execute, {
197
- method: "POST",
198
- body: JSON.stringify({ uuid, query, params }),
199
- credentials: "include",
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
  }
@@ -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, string | number | TransactionQueryRef>
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: string | number | TransactionQueryRef
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
- async execute(): Promise<TransactionResult> {
74
- throw new Error("NativeTransactionBackend.execute not yet implemented.");
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
- { boundary: number | null; op: ConstraintOperator; msg: ConstraintMessage }
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",