remult 0.13.16 → 0.13.19

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "remult",
3
- "version": "0.13.16",
3
+ "version": "0.13.19",
4
4
  "description": "remult core lib",
5
5
  "homepage": "https://remult.dev/",
6
6
  "repository": {
package/readme.md CHANGED
@@ -21,6 +21,8 @@
21
21
  <a href="https://snyk.io/test/npm/remult">
22
22
  <img alt="snyk" src="https://snyk.io/test/npm/remult/badge.svg"/>
23
23
  </a>
24
+ <a href="https://github.com/remult/remult/pulse" alt="Activity">
25
+ <img src="https://img.shields.io/github/commit-activity/m/remult/remult" /></a>
24
26
  </div>
25
27
 
26
28
  ## What is Remult?
@@ -18,28 +18,28 @@ var KnexDataProvider = /** @class */ (function () {
18
18
  };
19
19
  KnexDataProvider.prototype.transaction = function (action) {
20
20
  return tslib_1.__awaiter(this, void 0, void 0, function () {
21
- var t, _a;
22
- return tslib_1.__generator(this, function (_b) {
23
- switch (_b.label) {
21
+ var t, err_1;
22
+ return tslib_1.__generator(this, function (_a) {
23
+ switch (_a.label) {
24
24
  case 0: return [4 /*yield*/, this.knex.transaction()];
25
25
  case 1:
26
- t = _b.sent();
27
- _b.label = 2;
26
+ t = _a.sent();
27
+ _a.label = 2;
28
28
  case 2:
29
- _b.trys.push([2, 5, , 7]);
29
+ _a.trys.push([2, 5, , 7]);
30
30
  return [4 /*yield*/, action(new KnexDataProvider(t))];
31
31
  case 3:
32
- _b.sent();
32
+ _a.sent();
33
33
  return [4 /*yield*/, t.commit()];
34
34
  case 4:
35
- _b.sent();
35
+ _a.sent();
36
36
  return [3 /*break*/, 7];
37
37
  case 5:
38
- _a = _b.sent();
38
+ err_1 = _a.sent();
39
39
  return [4 /*yield*/, t.rollback()];
40
40
  case 6:
41
- _b.sent();
42
- return [3 /*break*/, 7];
41
+ _a.sent();
42
+ throw err_1;
43
43
  case 7: return [2 /*return*/];
44
44
  }
45
45
  });
@@ -516,7 +516,7 @@ var KnexSchemaBuilder = /** @class */ (function () {
516
516
  }
517
517
  KnexSchemaBuilder.prototype.verifyStructureOfAllEntities = function (remult) {
518
518
  return tslib_1.__awaiter(this, void 0, void 0, function () {
519
- var allEntities_1, allEntities_1_1, entity, metadata, err_1, _a, _b, _c, e_6_1;
519
+ var allEntities_1, allEntities_1_1, entity, metadata, err_2, _a, _b, _c, e_6_1;
520
520
  var e_6, _d;
521
521
  return tslib_1.__generator(this, function (_e) {
522
522
  switch (_e.label) {
@@ -547,12 +547,12 @@ var KnexSchemaBuilder = /** @class */ (function () {
547
547
  _e.label = 7;
548
548
  case 7: return [3 /*break*/, 10];
549
549
  case 8:
550
- err_1 = _e.sent();
550
+ err_2 = _e.sent();
551
551
  _b = (_a = console).log;
552
552
  _c = "failed verify structure of ";
553
553
  return [4 /*yield*/, metadata.getDbName()];
554
554
  case 9:
555
- _b.apply(_a, [_c + (_e.sent()) + " ", err_1]);
555
+ _b.apply(_a, [_c + (_e.sent()) + " ", err_2]);
556
556
  return [3 /*break*/, 10];
557
557
  case 10:
558
558
  allEntities_1_1 = allEntities_1.next();
@@ -662,7 +662,7 @@ var KnexSchemaBuilder = /** @class */ (function () {
662
662
  };
663
663
  KnexSchemaBuilder.prototype.verifyAllColumns = function (entity) {
664
664
  return tslib_1.__awaiter(this, void 0, void 0, function () {
665
- var e, _loop_2, this_2, _a, _b, col, e_9_1, err_2;
665
+ var e, _loop_2, this_2, _a, _b, col, e_9_1, err_3;
666
666
  var e_9, _c;
667
667
  return tslib_1.__generator(this, function (_d) {
668
668
  switch (_d.label) {
@@ -714,8 +714,8 @@ var KnexSchemaBuilder = /** @class */ (function () {
714
714
  return [7 /*endfinally*/];
715
715
  case 10: return [3 /*break*/, 12];
716
716
  case 11:
717
- err_2 = _d.sent();
718
- console.log(err_2);
717
+ err_3 = _d.sent();
718
+ console.log(err_3);
719
719
  return [3 /*break*/, 12];
720
720
  case 12: return [2 /*return*/];
721
721
  }
package/remult-mongo.js CHANGED
@@ -14,29 +14,29 @@ var MongoDataProvider = /** @class */ (function () {
14
14
  };
15
15
  MongoDataProvider.prototype.transaction = function (action) {
16
16
  return tslib_1.__awaiter(this, void 0, void 0, function () {
17
- var session, _a;
18
- return tslib_1.__generator(this, function (_b) {
19
- switch (_b.label) {
17
+ var session, err_1;
18
+ return tslib_1.__generator(this, function (_a) {
19
+ switch (_a.label) {
20
20
  case 0: return [4 /*yield*/, this.client.startSession()];
21
21
  case 1:
22
- session = _b.sent();
22
+ session = _a.sent();
23
23
  session.startTransaction();
24
- _b.label = 2;
24
+ _a.label = 2;
25
25
  case 2:
26
- _b.trys.push([2, 5, , 7]);
26
+ _a.trys.push([2, 5, , 7]);
27
27
  return [4 /*yield*/, action(new MongoDataProvider(this.db, undefined))];
28
28
  case 3:
29
- _b.sent();
29
+ _a.sent();
30
30
  return [4 /*yield*/, session.commitTransaction()];
31
31
  case 4:
32
- _b.sent();
32
+ _a.sent();
33
33
  return [3 /*break*/, 7];
34
34
  case 5:
35
- _a = _b.sent();
35
+ err_1 = _a.sent();
36
36
  return [4 /*yield*/, session.abortTransaction()];
37
37
  case 6:
38
- _b.sent();
39
- return [3 /*break*/, 7];
38
+ _a.sent();
39
+ throw err_1;
40
40
  case 7: return [2 /*return*/];
41
41
  }
42
42
  });
@@ -19,7 +19,7 @@ export declare function remultExpress(options?: {
19
19
  logApiEndPoints?: boolean;
20
20
  defaultGetLimit?: number;
21
21
  entities?: ClassType<any>[];
22
- controllers?: [];
22
+ controllers?: ClassType<any>[];
23
23
  }): RemultExpressBridge;
24
24
  export interface RemultExpressBridge extends express.RequestHandler {
25
25
  getRemult(req: express.Request): Promise<Remult>;
@@ -176,7 +176,18 @@ db_tests_setup_1.testAll("transactions", function (_a) {
176
176
  });
177
177
  });
178
178
  var client = new mongodb_1.MongoClient("mongodb://localhost:27017/local");
179
- var mongoDbPromise = client.connect().then(function (c) { return c.db("test"); });
179
+ var done;
180
+ var mongoDbPromise = client.connect().then(function (c) {
181
+ done = c;
182
+ return c.db("test");
183
+ });
184
+ afterAll(function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
185
+ return tslib_1.__generator(this, function (_a) {
186
+ if (done)
187
+ done.close();
188
+ return [2 /*return*/];
189
+ });
190
+ }); });
180
191
  function testMongo(key, what, focus) {
181
192
  var _this = this;
182
193
  if (focus === void 0) { focus = false; }
@@ -46,6 +46,7 @@ export declare class RepositoryImplementation<entityType> implements Repository<
46
46
  count(where?: EntityFilter<entityType>): Promise<number>;
47
47
  private cache;
48
48
  findFirst(where?: EntityFilter<entityType>, options?: FindFirstOptions<entityType>): Promise<entityType>;
49
+ private fieldsOf;
49
50
  create(item?: Partial<OmitEB<entityType>>): entityType;
50
51
  fromJson(json: any, newRow?: boolean): Promise<entityType>;
51
52
  findId(id: any, options?: FindFirstOptionsBase<entityType>): Promise<entityType>;
@@ -239,7 +239,7 @@ var RepositoryImplementation = /** @class */ (function () {
239
239
  if (!ref) {
240
240
  var instance = new this.entity(this.remult);
241
241
  try {
242
- for (var _b = tslib_1.__values(this.metadata.fields), _c = _b.next(); !_c.done; _c = _b.next()) {
242
+ for (var _b = tslib_1.__values(this.fieldsOf(entity)), _c = _b.next(); !_c.done; _c = _b.next()) {
243
243
  var field = _c.value;
244
244
  instance[field.key] = entity[field.key];
245
245
  }
@@ -521,12 +521,16 @@ var RepositoryImplementation = /** @class */ (function () {
521
521
  });
522
522
  });
523
523
  };
524
+ RepositoryImplementation.prototype.fieldsOf = function (item) {
525
+ var keys = Object.keys(item);
526
+ return this.metadata.fields.toArray().filter(function (x) { return keys.includes(x.key); });
527
+ };
524
528
  RepositoryImplementation.prototype.create = function (item) {
525
529
  var e_8, _a;
526
530
  var r = new this.entity(this.remult);
527
531
  if (item)
528
532
  try {
529
- for (var _b = tslib_1.__values(this.metadata.fields), _c = _b.next(); !_c.done; _c = _b.next()) {
533
+ for (var _b = tslib_1.__values(this.fieldsOf(item)), _c = _b.next(); !_c.done; _c = _b.next()) {
530
534
  var field = _c.value;
531
535
  r[field.key] = item[field.key];
532
536
  }
@@ -550,7 +554,7 @@ var RepositoryImplementation = /** @class */ (function () {
550
554
  case 0:
551
555
  obj = {};
552
556
  try {
553
- for (_a = tslib_1.__values(this.metadata.fields), _b = _a.next(); !_b.done; _b = _a.next()) {
557
+ for (_a = tslib_1.__values(this.fieldsOf(json)), _b = _a.next(); !_b.done; _b = _a.next()) {
554
558
  col = _b.value;
555
559
  if (json[col.key] !== undefined) {
556
560
  obj[col.key] = col.valueConverter.fromJson(json[col.key]);
@@ -1896,11 +1900,12 @@ var FieldRefImplementation = /** @class */ (function () {
1896
1900
  };
1897
1901
  FieldRefImplementation.prototype.__performValidation = function () {
1898
1902
  return tslib_1.__awaiter(this, void 0, void 0, function () {
1899
- var x, _a, _b, v, e_30_1;
1903
+ var x, _a, _b, v, e_30_1, error_1;
1900
1904
  var e_30, _c;
1901
1905
  return tslib_1.__generator(this, function (_d) {
1902
1906
  switch (_d.label) {
1903
1907
  case 0:
1908
+ _d.trys.push([0, 12, , 13]);
1904
1909
  x = typeof (this.settings.validate);
1905
1910
  if (!Array.isArray(this.settings.validate)) return [3 /*break*/, 9];
1906
1911
  _d.label = 1;
@@ -1936,7 +1941,15 @@ var FieldRefImplementation = /** @class */ (function () {
1936
1941
  case 10:
1937
1942
  _d.sent();
1938
1943
  _d.label = 11;
1939
- case 11: return [2 /*return*/];
1944
+ case 11: return [3 /*break*/, 13];
1945
+ case 12:
1946
+ error_1 = _d.sent();
1947
+ if (typeof error_1 === "string")
1948
+ this.error = error_1;
1949
+ else
1950
+ this.error = error_1.message;
1951
+ return [3 /*break*/, 13];
1952
+ case 13: return [2 /*return*/];
1940
1953
  }
1941
1954
  });
1942
1955
  });
@@ -18,8 +18,8 @@ function testAll(key, what, focus) {
18
18
  if (focus === void 0) { focus = false; }
19
19
  try {
20
20
  for (var databasesTesters_1 = tslib_1.__values(databasesTesters), databasesTesters_1_1 = databasesTesters_1.next(); !databasesTesters_1_1.done; databasesTesters_1_1 = databasesTesters_1.next()) {
21
- var test = databasesTesters_1_1.value;
22
- test(key, what, focus);
21
+ var test_1 = databasesTesters_1_1.value;
22
+ test_1(key, what, focus);
23
23
  }
24
24
  }
25
25
  catch (e_1_1) { e_1 = { error: e_1_1 }; }
@@ -40,8 +40,8 @@ function addDatabaseToTest(tester) {
40
40
  var e_2, _a;
41
41
  try {
42
42
  for (var loadedTests_1 = tslib_1.__values(loadedTests), loadedTests_1_1 = loadedTests_1.next(); !loadedTests_1_1.done; loadedTests_1_1 = loadedTests_1.next()) {
43
- var test = loadedTests_1_1.value;
44
- test(tester);
43
+ var test_2 = loadedTests_1_1.value;
44
+ test_2(tester);
45
45
  }
46
46
  }
47
47
  catch (e_2_1) { e_2 = { error: e_2_1 }; }
@@ -1546,3 +1546,33 @@ db_tests_setup_1.testAll("task with enum string", function (_a) {
1546
1546
  });
1547
1547
  });
1548
1548
  });
1549
+ db_tests_setup_1.testAll("test transaction rollback", function (_a) {
1550
+ var db = _a.db;
1551
+ return tslib_1.__awaiter(void 0, void 0, void 0, function () {
1552
+ var fail, _b;
1553
+ return tslib_1.__generator(this, function (_c) {
1554
+ switch (_c.label) {
1555
+ case 0:
1556
+ fail = true;
1557
+ _c.label = 1;
1558
+ case 1:
1559
+ _c.trys.push([1, 3, , 4]);
1560
+ return [4 /*yield*/, db.transaction(function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
1561
+ return tslib_1.__generator(this, function (_a) {
1562
+ throw "error";
1563
+ });
1564
+ }); })];
1565
+ case 2:
1566
+ _c.sent();
1567
+ fail = false;
1568
+ return [3 /*break*/, 4];
1569
+ case 3:
1570
+ _b = _c.sent();
1571
+ return [3 /*break*/, 4];
1572
+ case 4:
1573
+ expect(fail).toBe(true);
1574
+ return [2 /*return*/];
1575
+ }
1576
+ });
1577
+ });
1578
+ });