remult 0.14.4 → 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 (69) hide show
  1. package/assign.js +1 -5
  2. package/classType.js +1 -2
  3. package/graphql.js +84 -146
  4. package/index.js +25 -73
  5. package/inputTypes.js +9 -16
  6. package/package.json +2 -1
  7. package/postgres/index.js +1 -4
  8. package/postgres/postgres-data-provider.js +165 -364
  9. package/postgres/postgresColumnSyntax.js +4 -8
  10. package/remult-express.js +6 -10
  11. package/remult-knex/index.js +300 -720
  12. package/remult-middleware.js +24 -30
  13. package/remult-mongo.js +172 -406
  14. package/server/JsonEntityFileStorage.js +10 -15
  15. package/server/expressBridge.js +383 -569
  16. package/server/index.js +4 -11
  17. package/server/register-actions-on-server.js +12 -38
  18. package/server/register-entities-on-server.js +9 -13
  19. package/src/__EntityValueProvider.js +1 -2
  20. package/src/__RowsOfDataForTesting.js +1 -2
  21. package/src/backend-tests/backend-database-test-setup.backend-spec.js +72 -190
  22. package/src/backend-tests/my-test.backend-spec.js +45 -114
  23. package/src/column-interfaces.js +2 -6
  24. package/src/column.js +71 -113
  25. package/src/context.js +174 -330
  26. package/src/data-api.js +162 -326
  27. package/src/data-interfaces.js +7 -11
  28. package/src/data-providers/array-entity-data-provider.js +171 -286
  29. package/src/data-providers/in-memory-database.js +12 -27
  30. package/src/data-providers/json-data-provider.js +41 -77
  31. package/src/data-providers/rest-data-provider.js +102 -189
  32. package/src/data-providers/sql-database.js +223 -403
  33. package/src/data-providers/web-sql-data-provider.js +78 -139
  34. package/src/entity.js +1 -2
  35. package/src/filter/filter-consumer-bridge-to-sql-request.js +106 -248
  36. package/src/filter/filter-consumer-bridge-to-url-builder.js +1 -2
  37. package/src/filter/filter-interfaces.js +277 -440
  38. package/src/id-entity.js +8 -17
  39. package/src/remult3/RepositoryImplementation.js +1191 -2367
  40. package/src/remult3/index.js +2 -5
  41. package/src/remult3/remult3.js +1 -2
  42. package/src/server-action.js +294 -528
  43. package/src/shared-tests/db-tests-setup.js +49 -153
  44. package/src/shared-tests/db-tests.db-tests.js +660 -1566
  45. package/src/shared-tests/deleteAll.js +3 -20
  46. package/src/shared-tests/entityWithValidations.js +52 -79
  47. package/src/shared-tests/index.js +4 -6
  48. package/src/shared-tests/test-custom-id-column.spec.js +37 -85
  49. package/src/shared-tests/test-special-value.spec.js +64 -104
  50. package/src/shared-tests/test-update-with-null.spec.js +28 -49
  51. package/src/sort.js +38 -95
  52. package/src/sql-command.js +1 -2
  53. package/src/tests/Done.js +7 -13
  54. package/src/tests/TestDataApiResponse.js +15 -22
  55. package/src/tests/c.js +21 -27
  56. package/src/tests/createData.js +20 -48
  57. package/src/tests/d.js +19 -27
  58. package/src/tests/dWithPrefilter.js +31 -44
  59. package/src/tests/entityForCustomFilter.js +42 -66
  60. package/src/tests/entityWithValidationsOnColumn.js +21 -29
  61. package/src/tests/frontend-database-tests-setup.spec.js +35 -98
  62. package/src/tests/h.js +35 -44
  63. package/src/tests/remult-3-entities.js +71 -80
  64. package/src/tests/tasks.js +23 -29
  65. package/src/tests/testHelper.spec.js +170 -322
  66. package/src/tests/testModel/models.js +25 -33
  67. package/src/validators.js +32 -59
  68. package/urlBuilder.js +8 -14
  69. 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);