remult 0.14.2 → 0.14.5

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.
Files changed (70) hide show
  1. package/assign.js +1 -5
  2. package/classType.js +1 -2
  3. package/graphql.js +84 -146
  4. package/index.d.ts +13 -0
  5. package/index.js +25 -55
  6. package/inputTypes.js +9 -16
  7. package/package.json +6 -1
  8. package/postgres/index.js +1 -4
  9. package/postgres/postgres-data-provider.js +165 -364
  10. package/postgres/postgresColumnSyntax.js +4 -8
  11. package/remult-express.js +6 -10
  12. package/remult-knex/index.js +300 -720
  13. package/remult-middleware.js +24 -30
  14. package/remult-mongo.js +172 -406
  15. package/server/JsonEntityFileStorage.js +10 -15
  16. package/server/expressBridge.js +383 -569
  17. package/server/index.js +4 -11
  18. package/server/register-actions-on-server.js +12 -38
  19. package/server/register-entities-on-server.js +9 -13
  20. package/src/__EntityValueProvider.js +1 -2
  21. package/src/__RowsOfDataForTesting.js +1 -2
  22. package/src/backend-tests/backend-database-test-setup.backend-spec.js +72 -190
  23. package/src/backend-tests/my-test.backend-spec.js +45 -114
  24. package/src/column-interfaces.js +2 -6
  25. package/src/column.js +71 -113
  26. package/src/context.js +174 -330
  27. package/src/data-api.js +162 -326
  28. package/src/data-interfaces.js +7 -11
  29. package/src/data-providers/array-entity-data-provider.js +171 -286
  30. package/src/data-providers/in-memory-database.js +12 -27
  31. package/src/data-providers/json-data-provider.js +41 -77
  32. package/src/data-providers/rest-data-provider.js +102 -189
  33. package/src/data-providers/sql-database.js +223 -403
  34. package/src/data-providers/web-sql-data-provider.js +78 -139
  35. package/src/entity.js +1 -2
  36. package/src/filter/filter-consumer-bridge-to-sql-request.js +106 -248
  37. package/src/filter/filter-consumer-bridge-to-url-builder.js +1 -2
  38. package/src/filter/filter-interfaces.js +277 -440
  39. package/src/id-entity.js +8 -17
  40. package/src/remult3/RepositoryImplementation.js +1191 -2367
  41. package/src/remult3/index.js +2 -5
  42. package/src/remult3/remult3.js +1 -2
  43. package/src/server-action.js +294 -528
  44. package/src/shared-tests/db-tests-setup.js +49 -153
  45. package/src/shared-tests/db-tests.db-tests.js +660 -1566
  46. package/src/shared-tests/deleteAll.js +3 -20
  47. package/src/shared-tests/entityWithValidations.js +52 -79
  48. package/src/shared-tests/index.js +4 -6
  49. package/src/shared-tests/test-custom-id-column.spec.js +37 -85
  50. package/src/shared-tests/test-special-value.spec.js +64 -104
  51. package/src/shared-tests/test-update-with-null.spec.js +28 -49
  52. package/src/sort.js +38 -95
  53. package/src/sql-command.js +1 -2
  54. package/src/tests/Done.js +7 -13
  55. package/src/tests/TestDataApiResponse.js +15 -22
  56. package/src/tests/c.js +21 -27
  57. package/src/tests/createData.js +20 -48
  58. package/src/tests/d.js +19 -27
  59. package/src/tests/dWithPrefilter.js +31 -44
  60. package/src/tests/entityForCustomFilter.js +42 -66
  61. package/src/tests/entityWithValidationsOnColumn.js +21 -29
  62. package/src/tests/frontend-database-tests-setup.spec.js +35 -98
  63. package/src/tests/h.js +35 -44
  64. package/src/tests/remult-3-entities.js +71 -80
  65. package/src/tests/tasks.js +23 -29
  66. package/src/tests/testHelper.spec.js +170 -322
  67. package/src/tests/testModel/models.js +25 -33
  68. package/src/validators.js +32 -59
  69. package/urlBuilder.js +8 -14
  70. package/valueConverters.js +161 -160
@@ -1,21 +1,4 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.deleteAll = void 0;
4
- var tslib_1 = require("tslib");
5
- function deleteAll(r) {
6
- return tslib_1.__awaiter(this, void 0, void 0, function () {
7
- var _a, _b;
8
- return tslib_1.__generator(this, function (_c) {
9
- switch (_c.label) {
10
- case 0:
11
- _b = (_a = Promise).all;
12
- return [4 /*yield*/, r.find()];
13
- case 1: return [4 /*yield*/, _b.apply(_a, [(_c.sent()).map(function (x) { return r.delete(x); })])];
14
- case 2:
15
- _c.sent();
16
- return [2 /*return*/, r];
17
- }
18
- });
19
- });
1
+ export async function deleteAll(r) {
2
+ await Promise.all((await r.find()).map(x => r.delete(x)));
3
+ return r;
20
4
  }
21
- exports.deleteAll = deleteAll;
@@ -1,80 +1,53 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.entityWithValidations = exports.testConfiguration = void 0;
4
- var tslib_1 = require("tslib");
5
- var context_1 = require("../context");
6
- var remult3_1 = require("../remult3");
7
- exports.testConfiguration = { restDbRunningOnServer: false };
8
- var entityWithValidations = /** @class */ (function (_super) {
9
- tslib_1.__extends(entityWithValidations, _super);
10
- function entityWithValidations(remult) {
11
- var _this = _super.call(this) || this;
12
- _this.remult = remult;
13
- return _this;
1
+ var entityWithValidations_1;
2
+ import { __decorate, __metadata } from "tslib";
3
+ import { Remult } from '../context';
4
+ import { Entity, EntityBase, Fields } from '../remult3';
5
+ export var testConfiguration = { restDbRunningOnServer: false };
6
+ let entityWithValidations = entityWithValidations_1 = class entityWithValidations extends EntityBase {
7
+ constructor(remult) {
8
+ super();
9
+ this.remult = remult;
14
10
  }
15
- entityWithValidations_1 = entityWithValidations;
16
- entityWithValidations.create4RowsInDp = function (createEntity) {
17
- return tslib_1.__awaiter(this, void 0, void 0, function () {
18
- var s, c;
19
- return tslib_1.__generator(this, function (_a) {
20
- switch (_a.label) {
21
- case 0: return [4 /*yield*/, createEntity(entityWithValidations_1)];
22
- case 1:
23
- s = _a.sent();
24
- c = s.create();
25
- c.myId = 1;
26
- c.name = 'noam';
27
- return [4 /*yield*/, c._.save()];
28
- case 2:
29
- _a.sent();
30
- c = s.create();
31
- c.myId = 2;
32
- c.name = 'yael';
33
- return [4 /*yield*/, c._.save()];
34
- case 3:
35
- _a.sent();
36
- c = s.create();
37
- c.myId = 3;
38
- c.name = 'yoni';
39
- return [4 /*yield*/, c._.save()];
40
- case 4:
41
- _a.sent();
42
- c = s.create();
43
- c.myId = 4;
44
- c.name = 'maayan';
45
- return [4 /*yield*/, c._.save()];
46
- case 5:
47
- _a.sent();
48
- return [2 /*return*/, s];
49
- }
50
- });
51
- });
52
- };
53
- var entityWithValidations_1;
54
- entityWithValidations.savingRowCount = 0;
55
- tslib_1.__decorate([
56
- remult3_1.Fields.integer(),
57
- tslib_1.__metadata("design:type", Number)
58
- ], entityWithValidations.prototype, "myId", void 0);
59
- tslib_1.__decorate([
60
- remult3_1.Fields.string(),
61
- tslib_1.__metadata("design:type", String)
62
- ], entityWithValidations.prototype, "name", void 0);
63
- entityWithValidations = entityWithValidations_1 = tslib_1.__decorate([
64
- remult3_1.Entity('', {
65
- allowApiCrud: true,
66
- saving: function (t) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
67
- return tslib_1.__generator(this, function (_a) {
68
- if (!t.name || t.name.length < 3)
69
- t._.fields.name.error = 'invalid';
70
- if (!exports.testConfiguration.restDbRunningOnServer)
71
- entityWithValidations_1.savingRowCount++;
72
- return [2 /*return*/];
73
- });
74
- }); }
75
- }),
76
- tslib_1.__metadata("design:paramtypes", [context_1.Remult])
77
- ], entityWithValidations);
78
- return entityWithValidations;
79
- }(remult3_1.EntityBase));
80
- exports.entityWithValidations = entityWithValidations;
11
+ static async create4RowsInDp(createEntity) {
12
+ let s = await createEntity(entityWithValidations_1);
13
+ let c = s.create();
14
+ c.myId = 1;
15
+ c.name = 'noam';
16
+ await c._.save();
17
+ c = s.create();
18
+ c.myId = 2;
19
+ c.name = 'yael';
20
+ await c._.save();
21
+ c = s.create();
22
+ c.myId = 3;
23
+ c.name = 'yoni';
24
+ await c._.save();
25
+ c = s.create();
26
+ c.myId = 4;
27
+ c.name = 'maayan';
28
+ await c._.save();
29
+ return s;
30
+ }
31
+ };
32
+ entityWithValidations.savingRowCount = 0;
33
+ __decorate([
34
+ Fields.integer(),
35
+ __metadata("design:type", Number)
36
+ ], entityWithValidations.prototype, "myId", void 0);
37
+ __decorate([
38
+ Fields.string(),
39
+ __metadata("design:type", String)
40
+ ], entityWithValidations.prototype, "name", void 0);
41
+ entityWithValidations = entityWithValidations_1 = __decorate([
42
+ Entity('', {
43
+ allowApiCrud: true,
44
+ saving: async (t) => {
45
+ if (!t.name || t.name.length < 3)
46
+ t._.fields.name.error = 'invalid';
47
+ if (!testConfiguration.restDbRunningOnServer)
48
+ entityWithValidations_1.savingRowCount++;
49
+ }
50
+ }),
51
+ __metadata("design:paramtypes", [Remult])
52
+ ], entityWithValidations);
53
+ export { entityWithValidations };
@@ -1,6 +1,4 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- require("./db-tests.db-tests");
4
- require("./test-custom-id-column.spec");
5
- require("./test-special-value.spec");
6
- require("./test-update-with-null.spec");
1
+ import './db-tests.db-tests';
2
+ import './test-custom-id-column.spec';
3
+ import './test-special-value.spec';
4
+ import './test-update-with-null.spec';
@@ -1,89 +1,41 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- var tslib_1 = require("tslib");
4
- var remult3_1 = require("../remult3");
5
- var db_tests_setup_1 = require("./db-tests-setup");
6
- describe("custom id column", function () {
7
- db_tests_setup_1.testAll("basic test", function (_a) {
8
- var createEntity = _a.createEntity;
9
- return tslib_1.__awaiter(void 0, void 0, void 0, function () {
10
- var type, c, r;
11
- return tslib_1.__generator(this, function (_b) {
12
- switch (_b.label) {
13
- case 0:
14
- type = /** @class */ (function (_super) {
15
- tslib_1.__extends(class_1, _super);
16
- function class_1() {
17
- return _super !== null && _super.apply(this, arguments) || this;
18
- }
19
- return class_1;
20
- }(remult3_1.EntityBase));
21
- remult3_1.BuildEntity(type, 'custom', {
22
- a: remult3_1.Fields.number(),
23
- b: remult3_1.Fields.number()
24
- }, { allowApiCrud: true });
25
- return [4 /*yield*/, createEntity(type)];
26
- case 1:
27
- c = _b.sent();
28
- r = c.create();
29
- r.a = 1;
30
- r.b = 1;
31
- return [4 /*yield*/, r._.save()];
32
- case 2:
33
- _b.sent();
34
- r = c.create();
35
- r.a = 2;
36
- r.b = 2;
37
- return [4 /*yield*/, r._.save()];
38
- case 3:
39
- _b.sent();
40
- expect(c.metadata.idMetadata.field.key).toBe(c.metadata.fields.a.key);
41
- return [2 /*return*/];
42
- }
43
- });
44
- });
1
+ import { Entity, EntityBase, BuildEntity, Fields } from '../remult3';
2
+ import { testAll } from './db-tests-setup';
3
+ describe("custom id column", () => {
4
+ testAll("basic test", async ({ createEntity }) => {
5
+ let type = class extends EntityBase {
6
+ };
7
+ BuildEntity(type, 'custom', {
8
+ a: Fields.number(),
9
+ b: Fields.number()
10
+ }, { allowApiCrud: true });
11
+ let c = await createEntity(type);
12
+ let r = c.create();
13
+ r.a = 1;
14
+ r.b = 1;
15
+ await r._.save();
16
+ r = c.create();
17
+ r.a = 2;
18
+ r.b = 2;
19
+ await r._.save();
20
+ expect(c.metadata.idMetadata.field.key).toBe(c.metadata.fields.a.key);
45
21
  });
46
- db_tests_setup_1.testAll("basic test id column not first column", function (_a) {
47
- var createEntity = _a.createEntity;
48
- return tslib_1.__awaiter(void 0, void 0, void 0, function () {
49
- var type, c, r, _b;
50
- return tslib_1.__generator(this, function (_c) {
51
- switch (_c.label) {
52
- case 0:
53
- type = /** @class */ (function (_super) {
54
- tslib_1.__extends(class_2, _super);
55
- function class_2() {
56
- return _super !== null && _super.apply(this, arguments) || this;
57
- }
58
- return class_2;
59
- }(remult3_1.EntityBase));
60
- remult3_1.Entity('custom2', { allowApiCrud: true })(type);
61
- remult3_1.Fields.number()(type.prototype, 'a');
62
- remult3_1.Fields.number()(type.prototype, 'id');
63
- return [4 /*yield*/, createEntity(type)];
64
- case 1:
65
- c = _c.sent();
66
- r = c.create();
67
- r.a = 1;
68
- r.id = 5;
69
- return [4 /*yield*/, r._.save()];
70
- case 2:
71
- _c.sent();
72
- r = c.create();
73
- r.a = 2;
74
- r.id = 6;
75
- return [4 /*yield*/, r._.save()];
76
- case 3:
77
- _c.sent();
78
- expect(r._.repository.metadata.idMetadata.field.key).toBe(r._.fields.id.metadata.key);
79
- _b = expect;
80
- return [4 /*yield*/, c.findId(6)];
81
- case 4:
82
- _b.apply(void 0, [(_c.sent()).a]).toBe(2);
83
- return [2 /*return*/];
84
- }
85
- });
86
- });
22
+ testAll("basic test id column not first column", async ({ createEntity }) => {
23
+ let type = class extends EntityBase {
24
+ };
25
+ Entity('custom2', { allowApiCrud: true })(type);
26
+ Fields.number()(type.prototype, 'a');
27
+ Fields.number()(type.prototype, 'id');
28
+ let c = await createEntity(type);
29
+ let r = c.create();
30
+ r.a = 1;
31
+ r.id = 5;
32
+ await r._.save();
33
+ r = c.create();
34
+ r.a = 2;
35
+ r.id = 6;
36
+ await r._.save();
37
+ expect(r._.repository.metadata.idMetadata.field.key).toBe(r._.fields.id.metadata.key);
38
+ expect((await c.findId(6)).a).toBe(2);
87
39
  });
88
40
  });
89
41
  //typing game
@@ -1,128 +1,88 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.GroupsValue = void 0;
4
- var tslib_1 = require("tslib");
5
- var remult3_1 = require("../remult3");
6
- var db_tests_setup_1 = require("./db-tests-setup");
7
- var GroupsValue = /** @class */ (function () {
8
- function GroupsValue(value) {
1
+ var GroupsValue_1;
2
+ import { __decorate, __metadata } from "tslib";
3
+ import { Entity, EntityBase, Field, FieldType, Fields } from "../remult3";
4
+ import { testAll } from "./db-tests-setup";
5
+ let GroupsValue = GroupsValue_1 = class GroupsValue {
6
+ constructor(value) {
9
7
  this.value = value;
10
8
  }
11
- GroupsValue_1 = GroupsValue;
12
- GroupsValue.prototype.hasAny = function () {
9
+ hasAny() {
13
10
  return this.value != '';
14
- };
15
- GroupsValue.prototype.evilGet = function () {
11
+ }
12
+ evilGet() {
16
13
  return this.value;
17
- };
18
- GroupsValue.prototype.listGroups = function () {
14
+ }
15
+ listGroups() {
19
16
  if (!this.value)
20
17
  return [];
21
18
  return this.value.split(',');
22
- };
23
- GroupsValue.prototype.removeGroup = function (group) {
24
- var groups = this.value.split(",").map(function (x) { return x.trim(); });
25
- var index = groups.indexOf(group);
26
- var result = '';
19
+ }
20
+ removeGroup(group) {
21
+ let groups = this.value.split(",").map(x => x.trim());
22
+ let index = groups.indexOf(group);
23
+ let result = '';
27
24
  if (index >= 0) {
28
25
  groups.splice(index, 1);
29
26
  result = groups.join(", ");
30
27
  }
31
28
  return new GroupsValue_1(result);
32
- };
33
- GroupsValue.prototype.addGroup = function (group) {
34
- var r = this.value;
29
+ }
30
+ addGroup(group) {
31
+ let r = this.value;
35
32
  if (r)
36
33
  r += ', ';
37
34
  else
38
35
  r = '';
39
36
  r += group;
40
37
  return new GroupsValue_1(r);
41
- };
42
- GroupsValue.prototype.selected = function (group) {
38
+ }
39
+ selected(group) {
43
40
  if (!this.value)
44
41
  return false;
45
42
  return this.value.indexOf(group) >= 0;
46
- };
47
- var GroupsValue_1;
48
- GroupsValue = GroupsValue_1 = tslib_1.__decorate([
49
- remult3_1.FieldType({
50
- valueConverter: {
51
- toJson: function (x) { return x ? x.value : ''; },
52
- fromJson: function (x) { return new GroupsValue_1(x); },
53
- displayValue: function (x) { return x.value; }
54
- }
55
- }),
56
- tslib_1.__metadata("design:paramtypes", [String])
57
- ], GroupsValue);
58
- return GroupsValue;
59
- }());
60
- exports.GroupsValue = GroupsValue;
61
- var testGroups = /** @class */ (function (_super) {
62
- tslib_1.__extends(testGroups, _super);
63
- function testGroups() {
64
- var _this = _super !== null && _super.apply(this, arguments) || this;
65
- _this.id = 0;
66
- return _this;
67
43
  }
68
- tslib_1.__decorate([
69
- remult3_1.Fields.integer(),
70
- tslib_1.__metadata("design:type", Number)
71
- ], testGroups.prototype, "id", void 0);
72
- tslib_1.__decorate([
73
- remult3_1.Field(function () { return GroupsValue; }),
74
- tslib_1.__metadata("design:type", GroupsValue)
75
- ], testGroups.prototype, "g", void 0);
76
- testGroups = tslib_1.__decorate([
77
- remult3_1.Entity("testGroups", { allowApiCrud: true })
78
- ], testGroups);
79
- return testGroups;
80
- }(remult3_1.EntityBase));
81
- db_tests_setup_1.testAll("test save and load", function (_a) {
82
- var createEntity = _a.createEntity;
83
- return tslib_1.__awaiter(void 0, void 0, void 0, function () {
84
- var re, x;
85
- return tslib_1.__generator(this, function (_b) {
86
- switch (_b.label) {
87
- case 0: return [4 /*yield*/, createEntity(testGroups)];
88
- case 1:
89
- re = _b.sent();
90
- return [4 /*yield*/, re.create({ id: 1 }).save()];
91
- case 2:
92
- _b.sent();
93
- return [4 /*yield*/, re.findFirst()];
94
- case 3:
95
- x = _b.sent();
96
- expect(x.g.evilGet()).toBe('');
97
- x.g = x.g.addGroup("xx");
98
- expect(x.$.g.valueChanged()).toBe(true);
99
- return [4 /*yield*/, x.save()];
100
- case 4:
101
- _b.sent();
102
- expect(x.g.evilGet()).toBe('xx');
103
- return [2 /*return*/];
104
- }
105
- });
106
- });
44
+ };
45
+ GroupsValue = GroupsValue_1 = __decorate([
46
+ FieldType({
47
+ valueConverter: {
48
+ toJson: x => x ? x.value : '',
49
+ fromJson: x => new GroupsValue_1(x),
50
+ displayValue: x => x.value
51
+ }
52
+ }),
53
+ __metadata("design:paramtypes", [String])
54
+ ], GroupsValue);
55
+ export { GroupsValue };
56
+ let testGroups = class testGroups extends EntityBase {
57
+ constructor() {
58
+ super(...arguments);
59
+ this.id = 0;
60
+ }
61
+ };
62
+ __decorate([
63
+ Fields.integer(),
64
+ __metadata("design:type", Number)
65
+ ], testGroups.prototype, "id", void 0);
66
+ __decorate([
67
+ Field(() => GroupsValue),
68
+ __metadata("design:type", GroupsValue)
69
+ ], testGroups.prototype, "g", void 0);
70
+ testGroups = __decorate([
71
+ Entity("testGroups", { allowApiCrud: true })
72
+ ], testGroups);
73
+ testAll("test save and load", async ({ createEntity }) => {
74
+ let re = await createEntity(testGroups);
75
+ await re.create({ id: 1 }).save();
76
+ let x = await re.findFirst();
77
+ expect(x.g.evilGet()).toBe('');
78
+ x.g = x.g.addGroup("xx");
79
+ expect(x.$.g.valueChanged()).toBe(true);
80
+ await x.save();
81
+ expect(x.g.evilGet()).toBe('xx');
107
82
  });
108
- db_tests_setup_1.testAll("test2 save and load", function (_a) {
109
- var createEntity = _a.createEntity;
110
- return tslib_1.__awaiter(void 0, void 0, void 0, function () {
111
- var re, x;
112
- return tslib_1.__generator(this, function (_b) {
113
- switch (_b.label) {
114
- case 0: return [4 /*yield*/, createEntity(testGroups)];
115
- case 1:
116
- re = _b.sent();
117
- return [4 /*yield*/, re.create({ id: 1, g: new GroupsValue(undefined) }).save()];
118
- case 2:
119
- _b.sent();
120
- return [4 /*yield*/, re.findFirst()];
121
- case 3:
122
- x = _b.sent();
123
- expect(x.g.evilGet()).toBe('');
124
- return [2 /*return*/];
125
- }
126
- });
127
- });
83
+ testAll("test2 save and load", async ({ createEntity }) => {
84
+ let re = await createEntity(testGroups);
85
+ await re.create({ id: 1, g: new GroupsValue(undefined) }).save();
86
+ let x = await re.findFirst();
87
+ expect(x.g.evilGet()).toBe('');
128
88
  });
@@ -1,51 +1,30 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- var tslib_1 = require("tslib");
4
- var remult3_1 = require("../remult3");
5
- var db_tests_setup_1 = require("./db-tests-setup");
6
- var testNull = /** @class */ (function (_super) {
7
- tslib_1.__extends(testNull, _super);
8
- function testNull() {
9
- var _this = _super !== null && _super.apply(this, arguments) || this;
10
- _this.id = 0;
11
- return _this;
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { Entity, EntityBase, Field, Fields } from "../remult3";
3
+ import { testAll } from "./db-tests-setup";
4
+ let testNull = class testNull extends EntityBase {
5
+ constructor() {
6
+ super(...arguments);
7
+ this.id = 0;
12
8
  }
13
- tslib_1.__decorate([
14
- remult3_1.Fields.integer(),
15
- tslib_1.__metadata("design:type", Number)
16
- ], testNull.prototype, "id", void 0);
17
- tslib_1.__decorate([
18
- remult3_1.Field(undefined, { allowNull: true }),
19
- tslib_1.__metadata("design:type", Object)
20
- ], testNull.prototype, "myCol", void 0);
21
- testNull = tslib_1.__decorate([
22
- remult3_1.Entity('testNull', { allowApiCrud: true })
23
- ], testNull);
24
- return testNull;
25
- }(remult3_1.EntityBase));
26
- db_tests_setup_1.testAll("test that update null works", function (_a) {
27
- var createEntity = _a.createEntity;
28
- return tslib_1.__awaiter(void 0, void 0, void 0, function () {
29
- var r, i;
30
- var _b;
31
- return tslib_1.__generator(this, function (_c) {
32
- switch (_c.label) {
33
- case 0: return [4 /*yield*/, createEntity(testNull)];
34
- case 1:
35
- r = _c.sent();
36
- i = r.create({ id: 1, myCol: { value: 'abc' } });
37
- return [4 /*yield*/, i.save()];
38
- case 2:
39
- _c.sent();
40
- expect((_b = i.myCol) === null || _b === void 0 ? void 0 : _b.value).toBe("abc");
41
- i.myCol = null;
42
- expect(i.myCol).toBe(null);
43
- return [4 /*yield*/, i.save()];
44
- case 3:
45
- _c.sent();
46
- expect(i.myCol).toBe(null);
47
- return [2 /*return*/];
48
- }
49
- });
50
- });
9
+ };
10
+ __decorate([
11
+ Fields.integer(),
12
+ __metadata("design:type", Number)
13
+ ], testNull.prototype, "id", void 0);
14
+ __decorate([
15
+ Field(undefined, { allowNull: true }),
16
+ __metadata("design:type", Object)
17
+ ], testNull.prototype, "myCol", void 0);
18
+ testNull = __decorate([
19
+ Entity('testNull', { allowApiCrud: true })
20
+ ], testNull);
21
+ testAll("test that update null works", async ({ createEntity }) => {
22
+ let r = await createEntity(testNull);
23
+ let i = r.create({ id: 1, myCol: { value: 'abc' } });
24
+ await i.save();
25
+ expect(i.myCol?.value).toBe("abc");
26
+ i.myCol = null;
27
+ expect(i.myCol).toBe(null);
28
+ await i.save();
29
+ expect(i.myCol).toBe(null);
51
30
  }, false);