remult 0.13.15 → 0.13.18
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 +1 -1
- package/readme.md +9 -1
- package/remult-knex/index.js +17 -17
- package/remult-mongo.js +11 -11
- package/server/expressBridge.d.ts +1 -1
- package/src/remult3/RepositoryImplementation.d.ts +1 -0
- package/src/remult3/RepositoryImplementation.js +8 -4
- package/src/shared-tests/db-tests-setup.js +4 -4
- package/src/shared-tests/db-tests.db-tests.js +30 -0
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -6,7 +6,10 @@
|
|
|
6
6
|
<a href="https://circleci.com/gh/remult/remult/tree/master">
|
|
7
7
|
<img alt="CircleCI" src="https://circleci.com/gh/remult/remult/tree/master.svg?style=svg">
|
|
8
8
|
</a>
|
|
9
|
-
<a href="https://
|
|
9
|
+
<a href="https://codecov.io/gh/remult/remult">
|
|
10
|
+
<img src="https://codecov.io/gh/remult/remult/branch/master/graph/badge.svg?token=LYWQRUN3D1"/>
|
|
11
|
+
</a>
|
|
12
|
+
<a href="https://raw.githubusercontent.com/remult/remult/master/LICENSE">
|
|
10
13
|
<img alt="GitHub license" src="https://img.shields.io/badge/license-MIT-blue.svg">
|
|
11
14
|
</a>
|
|
12
15
|
<a href="https://www.npmjs.com/package/remult">
|
|
@@ -15,6 +18,11 @@
|
|
|
15
18
|
<a href="https://www.npmjs.com/package/remult">
|
|
16
19
|
<img alt="npm downloads" src="https://img.shields.io/npm/dm/remult">
|
|
17
20
|
</a>
|
|
21
|
+
<a href="https://snyk.io/test/npm/remult">
|
|
22
|
+
<img alt="snyk" src="https://snyk.io/test/npm/remult/badge.svg"/>
|
|
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>
|
|
18
26
|
</div>
|
|
19
27
|
|
|
20
28
|
## What is Remult?
|
package/remult-knex/index.js
CHANGED
|
@@ -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,
|
|
22
|
-
return tslib_1.__generator(this, function (
|
|
23
|
-
switch (
|
|
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 =
|
|
27
|
-
|
|
26
|
+
t = _a.sent();
|
|
27
|
+
_a.label = 2;
|
|
28
28
|
case 2:
|
|
29
|
-
|
|
29
|
+
_a.trys.push([2, 5, , 7]);
|
|
30
30
|
return [4 /*yield*/, action(new KnexDataProvider(t))];
|
|
31
31
|
case 3:
|
|
32
|
-
|
|
32
|
+
_a.sent();
|
|
33
33
|
return [4 /*yield*/, t.commit()];
|
|
34
34
|
case 4:
|
|
35
|
-
|
|
35
|
+
_a.sent();
|
|
36
36
|
return [3 /*break*/, 7];
|
|
37
37
|
case 5:
|
|
38
|
-
|
|
38
|
+
err_1 = _a.sent();
|
|
39
39
|
return [4 /*yield*/, t.rollback()];
|
|
40
40
|
case 6:
|
|
41
|
-
|
|
42
|
-
|
|
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,
|
|
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
|
-
|
|
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()) + " ",
|
|
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,
|
|
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
|
-
|
|
718
|
-
console.log(
|
|
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,
|
|
18
|
-
return tslib_1.__generator(this, function (
|
|
19
|
-
switch (
|
|
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 =
|
|
22
|
+
session = _a.sent();
|
|
23
23
|
session.startTransaction();
|
|
24
|
-
|
|
24
|
+
_a.label = 2;
|
|
25
25
|
case 2:
|
|
26
|
-
|
|
26
|
+
_a.trys.push([2, 5, , 7]);
|
|
27
27
|
return [4 /*yield*/, action(new MongoDataProvider(this.db, undefined))];
|
|
28
28
|
case 3:
|
|
29
|
-
|
|
29
|
+
_a.sent();
|
|
30
30
|
return [4 /*yield*/, session.commitTransaction()];
|
|
31
31
|
case 4:
|
|
32
|
-
|
|
32
|
+
_a.sent();
|
|
33
33
|
return [3 /*break*/, 7];
|
|
34
34
|
case 5:
|
|
35
|
-
|
|
35
|
+
err_1 = _a.sent();
|
|
36
36
|
return [4 /*yield*/, session.abortTransaction()];
|
|
37
37
|
case 6:
|
|
38
|
-
|
|
39
|
-
|
|
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>;
|
|
@@ -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.
|
|
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,13 +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
|
-
var z = this.getEntityRef(r);
|
|
528
531
|
if (item)
|
|
529
532
|
try {
|
|
530
|
-
for (var _b = tslib_1.__values(this.
|
|
533
|
+
for (var _b = tslib_1.__values(this.fieldsOf(item)), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
531
534
|
var field = _c.value;
|
|
532
535
|
r[field.key] = item[field.key];
|
|
533
536
|
}
|
|
@@ -539,6 +542,7 @@ var RepositoryImplementation = /** @class */ (function () {
|
|
|
539
542
|
}
|
|
540
543
|
finally { if (e_8) throw e_8.error; }
|
|
541
544
|
}
|
|
545
|
+
var z = this.getEntityRef(r);
|
|
542
546
|
return r;
|
|
543
547
|
};
|
|
544
548
|
RepositoryImplementation.prototype.fromJson = function (json, newRow) {
|
|
@@ -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.
|
|
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]);
|
|
@@ -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
|
|
22
|
-
|
|
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
|
|
44
|
-
|
|
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
|
+
});
|