remult 0.17.2 → 0.18.0

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 (165) hide show
  1. package/SseSubscriptionServer.d.ts +23 -0
  2. package/SseSubscriptionServer.js +143 -0
  3. package/ably.d.ts +13 -0
  4. package/ably.js +59 -0
  5. package/esm/SseSubscriptionServer.d.ts +23 -0
  6. package/esm/SseSubscriptionServer.js +102 -0
  7. package/esm/ably.d.ts +13 -0
  8. package/esm/ably.js +28 -0
  9. package/esm/graphql.js +0 -1
  10. package/esm/index.d.ts +7 -4
  11. package/esm/index.js +4 -2
  12. package/esm/live-query/data-provider-live-query-storage.d.ts +23 -0
  13. package/esm/live-query/data-provider-live-query-storage.js +78 -0
  14. package/esm/myLog.d.ts +1 -0
  15. package/esm/myLog.js +5 -0
  16. package/esm/postgres/postgres-data-provider.d.ts +4 -2
  17. package/esm/postgres/postgres-data-provider.js +18 -6
  18. package/esm/postgres/schema-builder.d.ts +2 -1
  19. package/esm/postgres/schema-builder.js +49 -29
  20. package/esm/remult-knex/index.d.ts +10 -32
  21. package/esm/remult-knex/index.js +75 -51
  22. package/esm/remult-mongo.d.ts +9 -2
  23. package/esm/remult-mongo.js +24 -8
  24. package/esm/remult-next.d.ts +11 -0
  25. package/esm/remult-next.js +27 -0
  26. package/esm/server/core.d.ts +2 -0
  27. package/esm/server/core.js +2 -0
  28. package/esm/server/expressBridge.d.ts +19 -7
  29. package/esm/server/expressBridge.js +135 -31
  30. package/esm/server/index.d.ts +2 -1
  31. package/esm/server/index.js +2 -1
  32. package/esm/server/initDataProvider.d.ts +2 -0
  33. package/esm/server/initDataProvider.js +14 -0
  34. package/esm/src/buildRestDataProvider.d.ts +31 -0
  35. package/esm/src/buildRestDataProvider.js +110 -0
  36. package/esm/src/column-interfaces.d.ts +44 -8
  37. package/esm/src/column.d.ts +3 -3
  38. package/esm/src/context.d.ts +39 -36
  39. package/esm/src/context.js +87 -117
  40. package/esm/src/data-api.d.ts +9 -3
  41. package/esm/src/data-api.js +130 -63
  42. package/esm/src/data-interfaces.d.ts +5 -1
  43. package/esm/src/data-providers/array-entity-data-provider.d.ts +1 -1
  44. package/esm/src/data-providers/array-entity-data-provider.js +2 -17
  45. package/esm/src/data-providers/rest-data-provider.d.ts +4 -3
  46. package/esm/src/data-providers/rest-data-provider.js +64 -23
  47. package/esm/src/data-providers/sql-database.d.ts +7 -3
  48. package/esm/src/data-providers/sql-database.js +60 -17
  49. package/esm/src/data-providers/web-sql-data-provider.d.ts +3 -0
  50. package/esm/src/data-providers/web-sql-data-provider.js +23 -9
  51. package/esm/src/entity.d.ts +2 -2
  52. package/esm/src/filter/filter-consumer-bridge-to-sql-request.d.ts +16 -16
  53. package/esm/src/filter/filter-consumer-bridge-to-sql-request.js +29 -21
  54. package/esm/src/filter/filter-interfaces.d.ts +5 -5
  55. package/esm/src/filter/filter-interfaces.js +31 -26
  56. package/esm/src/live-query/LiveQueryClient.d.ts +1 -0
  57. package/esm/src/live-query/LiveQueryClient.js +184 -0
  58. package/esm/src/live-query/SseSubscriptionClient.d.ts +5 -0
  59. package/esm/src/live-query/SseSubscriptionClient.js +86 -0
  60. package/esm/src/live-query/SubscriptionChannel.d.ts +41 -0
  61. package/esm/src/live-query/SubscriptionChannel.js +121 -0
  62. package/esm/src/live-query/SubscriptionServer.d.ts +38 -0
  63. package/esm/src/live-query/SubscriptionServer.js +108 -0
  64. package/esm/src/remult-proxy.d.ts +1 -1
  65. package/esm/src/remult-proxy.js +52 -7
  66. package/esm/src/remult3/RepositoryImplementation.d.ts +14 -5
  67. package/esm/src/remult3/RepositoryImplementation.js +124 -44
  68. package/esm/src/remult3/getId.d.ts +2 -0
  69. package/esm/src/remult3/getId.js +7 -0
  70. package/esm/src/remult3/remult3.d.ts +67 -10
  71. package/esm/src/remult3/remult3.js +1 -0
  72. package/esm/src/server-action.d.ts +5 -1
  73. package/esm/src/server-action.js +11 -12
  74. package/esm/src/shared-tests/db-tests-setup.d.ts +12 -5
  75. package/esm/src/shared-tests/db-tests-setup.js +14 -6
  76. package/esm/src/shared-tests/db-tests.db-tests.js +71 -10
  77. package/esm/src/sort.d.ts +1 -0
  78. package/esm/src/sort.js +18 -0
  79. package/esm/src/sql-command.d.ts +5 -2
  80. package/esm/src/tests/entityForCustomFilter.d.ts +6 -6
  81. package/esm/src/tests/entityForCustomFilter.js +20 -21
  82. package/esm/src/tests/frontend-database-tests-setup.spec.js +3 -4
  83. package/esm/src/tests/testHelper.spec.d.ts +3 -1
  84. package/esm/src/tests/testHelper.spec.js +63 -60
  85. package/esm/src/valueConverters.js +15 -7
  86. package/graphql.js +0 -1
  87. package/index.d.ts +7 -4
  88. package/index.js +7 -3
  89. package/live-query/data-provider-live-query-storage.d.ts +23 -0
  90. package/live-query/data-provider-live-query-storage.js +236 -0
  91. package/myLog.d.ts +1 -0
  92. package/myLog.js +20 -0
  93. package/package.json +18 -1
  94. package/postgres/postgres-data-provider.d.ts +4 -2
  95. package/postgres/postgres-data-provider.js +54 -39
  96. package/postgres/schema-builder.d.ts +2 -1
  97. package/postgres/schema-builder.js +118 -70
  98. package/remult-express.js +1 -1
  99. package/remult-knex/index.d.ts +10 -32
  100. package/remult-knex/index.js +134 -87
  101. package/remult-mongo.d.ts +9 -2
  102. package/remult-mongo.js +39 -7
  103. package/remult-next.d.ts +11 -0
  104. package/remult-next.js +73 -0
  105. package/server/JsonEntityFileStorage.js +2 -2
  106. package/server/core.d.ts +2 -0
  107. package/server/core.js +5 -1
  108. package/server/expressBridge.d.ts +19 -7
  109. package/server/expressBridge.js +283 -69
  110. package/server/index.d.ts +2 -1
  111. package/server/index.js +3 -1
  112. package/server/initDataProvider.d.ts +2 -0
  113. package/server/initDataProvider.js +26 -0
  114. package/src/buildRestDataProvider.d.ts +31 -0
  115. package/src/buildRestDataProvider.js +162 -0
  116. package/src/column-interfaces.d.ts +44 -8
  117. package/src/column.d.ts +3 -3
  118. package/src/context.d.ts +39 -36
  119. package/src/context.js +171 -166
  120. package/src/data-api.d.ts +9 -3
  121. package/src/data-api.js +233 -88
  122. package/src/data-interfaces.d.ts +5 -1
  123. package/src/data-providers/array-entity-data-provider.d.ts +1 -1
  124. package/src/data-providers/array-entity-data-provider.js +2 -17
  125. package/src/data-providers/rest-data-provider.d.ts +4 -3
  126. package/src/data-providers/rest-data-provider.js +105 -39
  127. package/src/data-providers/sql-database.d.ts +7 -3
  128. package/src/data-providers/sql-database.js +89 -16
  129. package/src/data-providers/web-sql-data-provider.d.ts +3 -0
  130. package/src/data-providers/web-sql-data-provider.js +56 -11
  131. package/src/entity.d.ts +2 -2
  132. package/src/filter/filter-consumer-bridge-to-sql-request.d.ts +16 -16
  133. package/src/filter/filter-consumer-bridge-to-sql-request.js +59 -50
  134. package/src/filter/filter-interfaces.d.ts +5 -5
  135. package/src/filter/filter-interfaces.js +31 -26
  136. package/src/live-query/LiveQueryClient.d.ts +1 -0
  137. package/src/live-query/LiveQueryClient.js +283 -0
  138. package/src/live-query/SseSubscriptionClient.d.ts +5 -0
  139. package/src/live-query/SseSubscriptionClient.js +150 -0
  140. package/src/live-query/SubscriptionChannel.d.ts +41 -0
  141. package/src/live-query/SubscriptionChannel.js +209 -0
  142. package/src/live-query/SubscriptionServer.d.ts +38 -0
  143. package/src/live-query/SubscriptionServer.js +258 -0
  144. package/src/remult-proxy.d.ts +1 -1
  145. package/src/remult-proxy.js +153 -8
  146. package/src/remult3/RepositoryImplementation.d.ts +14 -5
  147. package/src/remult3/RepositoryImplementation.js +200 -85
  148. package/src/remult3/getId.d.ts +2 -0
  149. package/src/remult3/getId.js +11 -0
  150. package/src/remult3/remult3.d.ts +67 -10
  151. package/src/remult3/remult3.js +1 -0
  152. package/src/server-action.d.ts +5 -1
  153. package/src/server-action.js +11 -11
  154. package/src/shared-tests/db-tests-setup.d.ts +12 -5
  155. package/src/shared-tests/db-tests-setup.js +17 -8
  156. package/src/shared-tests/db-tests.db-tests.js +140 -8
  157. package/src/sort.d.ts +1 -0
  158. package/src/sort.js +18 -0
  159. package/src/sql-command.d.ts +5 -2
  160. package/src/tests/entityForCustomFilter.d.ts +6 -6
  161. package/src/tests/entityForCustomFilter.js +30 -31
  162. package/src/tests/frontend-database-tests-setup.spec.js +5 -6
  163. package/src/tests/testHelper.spec.d.ts +3 -1
  164. package/src/tests/testHelper.spec.js +104 -100
  165. package/src/valueConverters.js +15 -7
@@ -1,15 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ControllerBase = exports.EntityBase = exports.Entity = exports.decorateColumnSettings = exports.storableMember = exports.Field = exports.getValueList = exports.ValueListInfo = exports.ValueListFieldType = exports.isAutoIncrement = exports.Fields = exports.FieldType = exports.columnDefsImpl = exports.buildCaption = exports.CaptionTransformer = exports.getEntityRef = exports.FieldRefImplementation = exports.controllerRefImpl = exports.getControllerRef = exports.getFields = exports.rowHelperImplementation = exports.createOldEntity = exports.columnsOfType = exports.getEntityKey = exports.getEntitySettings = exports.entityInfo_key = exports.entityInfo = exports.__updateEntityBasedOnWhere = exports.RepositoryImplementation = void 0;
3
+ exports.getRepository = exports.getEntityMetadata = exports.ControllerBase = exports.EntityBase = exports.Entity = exports.decorateColumnSettings = exports.storableMember = exports.Field = exports.getValueList = exports.ValueListInfo = exports.ValueListFieldType = exports.isAutoIncrement = exports.Fields = exports.FieldType = exports.columnDefsImpl = exports.buildCaption = exports.CaptionTransformer = exports.getEntityRef = exports.FieldRefImplementation = exports.controllerRefImpl = exports.getControllerRef = exports.getFields = exports.rowHelperImplementation = exports.createOldEntity = exports.columnsOfType = exports.getEntityKey = exports.getEntitySettings = exports.entityInfo_key = exports.entityInfo = exports.__updateEntityBasedOnWhere = exports.RepositoryImplementation = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var column_1 = require("../column");
6
6
  var context_1 = require("../context");
7
7
  var filter_interfaces_1 = require("../filter/filter-interfaces");
8
8
  var sort_1 = require("../sort");
9
9
  var uuid_1 = require("uuid");
10
+ var cuid_1 = tslib_1.__importDefault(require("cuid"));
10
11
  var valueConverters_1 = require("../valueConverters");
11
12
  var filter_interfaces_2 = require("../filter/filter-interfaces");
12
13
  var assign_1 = require("../../assign");
14
+ var remult_proxy_1 = require("../remult-proxy");
15
+ var getId_1 = require("./getId");
13
16
  //import { remult } from "../remult-proxy";
14
17
  var classValidatorValidate = undefined;
15
18
  // import("class-validator".toString())
@@ -281,8 +284,10 @@ var RepositoryImplementation = /** @class */ (function () {
281
284
  finally { if (e_5) throw e_5.error; }
282
285
  }
283
286
  var row_1 = new rowHelperImplementation(this._info, instance, this, this.edp, this.remult, false);
284
- if (id)
287
+ if (id) {
285
288
  row_1.id = id;
289
+ row_1.originalId = id;
290
+ }
286
291
  else
287
292
  row_1.id = row_1.getId();
288
293
  ref = row_1;
@@ -319,6 +324,27 @@ var RepositoryImplementation = /** @class */ (function () {
319
324
  });
320
325
  });
321
326
  };
327
+ RepositoryImplementation.prototype.liveQuery = function (options) {
328
+ var _this = this;
329
+ if (!options)
330
+ options = {};
331
+ return {
332
+ subscribe: function (l) {
333
+ var _a, _b;
334
+ var listener = l;
335
+ if (typeof l === "function") {
336
+ listener = {
337
+ next: l,
338
+ complete: function () { },
339
+ error: function () { }
340
+ };
341
+ }
342
+ (_a = listener.error) !== null && _a !== void 0 ? _a : (listener.error = function () { });
343
+ (_b = listener.complete) !== null && _b !== void 0 ? _b : (listener.complete = function () { });
344
+ return _this.remult.liveQuerySubscriber.subscribe(_this, options, listener);
345
+ }
346
+ };
347
+ };
322
348
  RepositoryImplementation.prototype.find = function (options) {
323
349
  return tslib_1.__awaiter(this, void 0, void 0, function () {
324
350
  function loadManyToOne(repo, toLoad) {
@@ -348,41 +374,32 @@ var RepositoryImplementation = /** @class */ (function () {
348
374
  });
349
375
  });
350
376
  }
351
- var opt, _a, rawRows, loadFields, _b, _c, col, ei, load, repo, toLoad, rawRows_1, rawRows_1_1, r, val, e_6_1, result;
352
- var e_6, _d, e_7, _e;
377
+ var opt, rawRows, loadFields, _a, _b, col, ei, load, repo, toLoad, rawRows_1, rawRows_1_1, r, val, e_6_1, result;
378
+ var e_6, _c, e_7, _d;
353
379
  var _this = this;
354
- return tslib_1.__generator(this, function (_f) {
355
- switch (_f.label) {
380
+ return tslib_1.__generator(this, function (_e) {
381
+ switch (_e.label) {
356
382
  case 0:
357
383
  context_1.Remult.onFind(this._info, options);
358
- opt = {};
359
384
  if (!options)
360
385
  options = {};
361
- opt = {};
362
- if (!options.orderBy || Object.keys(options.orderBy).length === 0) {
363
- options.orderBy = this._info.entityInfo.defaultOrderBy;
364
- }
365
- _a = opt;
366
- return [4 /*yield*/, this.translateWhereToFilter(options.where)];
386
+ return [4 /*yield*/, this.buildEntityDataProviderFindOptions(options)];
367
387
  case 1:
368
- _a.where = _f.sent();
369
- opt.orderBy = sort_1.Sort.translateOrderByToSort(this.metadata, options.orderBy);
370
- opt.limit = options.limit;
371
- opt.page = options.page;
388
+ opt = _e.sent();
372
389
  return [4 /*yield*/, this.edp.find(opt)];
373
390
  case 2:
374
- rawRows = _f.sent();
391
+ rawRows = _e.sent();
375
392
  loadFields = undefined;
376
393
  if (options.load)
377
394
  loadFields = options.load(this.metadata.fields);
378
- _f.label = 3;
395
+ _e.label = 3;
379
396
  case 3:
380
- _f.trys.push([3, 8, 9, 10]);
381
- _b = tslib_1.__values(this.metadata.fields), _c = _b.next();
382
- _f.label = 4;
397
+ _e.trys.push([3, 8, 9, 10]);
398
+ _a = tslib_1.__values(this.metadata.fields), _b = _a.next();
399
+ _e.label = 4;
383
400
  case 4:
384
- if (!!_c.done) return [3 /*break*/, 7];
385
- col = _c.value;
401
+ if (!!_b.done) return [3 /*break*/, 7];
402
+ col = _b.value;
386
403
  ei = getEntitySettings(col.valueType, false);
387
404
  if (!ei) return [3 /*break*/, 6];
388
405
  load = !col.options.lazy;
@@ -403,26 +420,26 @@ var RepositoryImplementation = /** @class */ (function () {
403
420
  catch (e_7_1) { e_7 = { error: e_7_1 }; }
404
421
  finally {
405
422
  try {
406
- if (rawRows_1_1 && !rawRows_1_1.done && (_e = rawRows_1.return)) _e.call(rawRows_1);
423
+ if (rawRows_1_1 && !rawRows_1_1.done && (_d = rawRows_1.return)) _d.call(rawRows_1);
407
424
  }
408
425
  finally { if (e_7) throw e_7.error; }
409
426
  }
410
427
  if (!(toLoad.length > 0)) return [3 /*break*/, 6];
411
428
  return [4 /*yield*/, loadManyToOne(repo, toLoad)];
412
429
  case 5:
413
- _f.sent();
414
- _f.label = 6;
430
+ _e.sent();
431
+ _e.label = 6;
415
432
  case 6:
416
- _c = _b.next();
433
+ _b = _a.next();
417
434
  return [3 /*break*/, 4];
418
435
  case 7: return [3 /*break*/, 10];
419
436
  case 8:
420
- e_6_1 = _f.sent();
437
+ e_6_1 = _e.sent();
421
438
  e_6 = { error: e_6_1 };
422
439
  return [3 /*break*/, 10];
423
440
  case 9:
424
441
  try {
425
- if (_c && !_c.done && (_d = _b.return)) _d.call(_b);
442
+ if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
426
443
  }
427
444
  finally { if (e_6) throw e_6.error; }
428
445
  return [7 /*endfinally*/];
@@ -433,12 +450,35 @@ var RepositoryImplementation = /** @class */ (function () {
433
450
  }
434
451
  }); }); }))];
435
452
  case 11:
436
- result = _f.sent();
453
+ result = _e.sent();
437
454
  return [2 /*return*/, result];
438
455
  }
439
456
  });
440
457
  });
441
458
  };
459
+ RepositoryImplementation.prototype.buildEntityDataProviderFindOptions = function (options) {
460
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
461
+ var opt, _a;
462
+ return tslib_1.__generator(this, function (_b) {
463
+ switch (_b.label) {
464
+ case 0:
465
+ opt = {};
466
+ opt = {};
467
+ if (!options.orderBy || Object.keys(options.orderBy).length === 0) {
468
+ options.orderBy = this._info.entityInfo.defaultOrderBy;
469
+ }
470
+ _a = opt;
471
+ return [4 /*yield*/, this.translateWhereToFilter(options.where)];
472
+ case 1:
473
+ _a.where = _b.sent();
474
+ opt.orderBy = sort_1.Sort.translateOrderByToSort(this.metadata, options.orderBy);
475
+ opt.limit = options.limit;
476
+ opt.page = options.page;
477
+ return [2 /*return*/, opt];
478
+ }
479
+ });
480
+ });
481
+ };
442
482
  RepositoryImplementation.prototype.mapRawDataToResult = function (r, loadFields) {
443
483
  return tslib_1.__awaiter(this, void 0, void 0, function () {
444
484
  var x, helper;
@@ -615,6 +655,7 @@ var RepositoryImplementation = /** @class */ (function () {
615
655
  throw new Error("id can be either number or string, but got: " + typeof (id));
616
656
  return this.findFirst({}, tslib_1.__assign(tslib_1.__assign({ useCache: true }, options), { where: this.metadata.idMetadata.getIdFilter(id) }));
617
657
  };
658
+ /* @internal*/
618
659
  RepositoryImplementation.prototype.translateWhereToFilter = function (where) {
619
660
  return tslib_1.__awaiter(this, void 0, void 0, function () {
620
661
  var z, _a, r;
@@ -636,7 +677,7 @@ var RepositoryImplementation = /** @class */ (function () {
636
677
  case 2: return [4 /*yield*/, filter_interfaces_1.Filter.fromEntityFilter(this.metadata, where)];
637
678
  case 3:
638
679
  r = _c.sent();
639
- if (!(r && !this.dataProvider.supportsCustomFilter)) return [3 /*break*/, 5];
680
+ if (!(r && !this.dataProvider.supportsRawFilter)) return [3 /*break*/, 5];
640
681
  return [4 /*yield*/, filter_interfaces_1.Filter.translateCustomWhere(r, this.metadata, this.remult)];
641
682
  case 4:
642
683
  r = _c.sent();
@@ -764,6 +805,12 @@ var rowHelperBase = /** @class */ (function () {
764
805
  this._isLoading = false;
765
806
  this.lookups = new Map();
766
807
  this.originalValues = {};
808
+ {
809
+ var fac = remult;
810
+ if (fac != null && fac.remultFactory) {
811
+ remult = fac.remultFactory();
812
+ }
813
+ }
767
814
  var _loop_3 = function (col) {
768
815
  var ei = getEntitySettings(col.valueType, false);
769
816
  if (ei && remult) {
@@ -1021,6 +1068,9 @@ var rowHelperBase = /** @class */ (function () {
1021
1068
  };
1022
1069
  rowHelperBase.prototype.saveOriginalData = function () {
1023
1070
  this.originalValues = this.copyDataToObject();
1071
+ this.saveMoreOriginalData();
1072
+ };
1073
+ rowHelperBase.prototype.saveMoreOriginalData = function () {
1024
1074
  };
1025
1075
  rowHelperBase.prototype.validate = function () {
1026
1076
  return tslib_1.__awaiter(this, void 0, void 0, function () {
@@ -1200,10 +1250,10 @@ var rowHelperImplementation = /** @class */ (function (_super) {
1200
1250
  configurable: true
1201
1251
  });
1202
1252
  rowHelperImplementation.prototype.getId = function () {
1203
- if (this.info.idMetadata.field instanceof column_1.CompoundIdField)
1204
- return this.info.idMetadata.field.getId(this.instance);
1205
- else
1206
- return this.instance[this.info.idMetadata.field.key];
1253
+ return getId_1.getId(this.info, this.instance);
1254
+ };
1255
+ rowHelperImplementation.prototype.saveMoreOriginalData = function () {
1256
+ this.originalId = this.getId();
1207
1257
  };
1208
1258
  rowHelperImplementation.prototype.wasDeleted = function () {
1209
1259
  var _a;
@@ -1277,7 +1327,7 @@ var rowHelperImplementation = /** @class */ (function (_super) {
1277
1327
  return tslib_1.__generator(this, function (_h) {
1278
1328
  switch (_h.label) {
1279
1329
  case 0:
1280
- _h.trys.push([0, , 25, 26]);
1330
+ _h.trys.push([0, , 26, 27]);
1281
1331
  if (this._saving)
1282
1332
  throw new Error("cannot save while entity is already saving");
1283
1333
  this._saving = true;
@@ -1348,7 +1398,7 @@ var rowHelperImplementation = /** @class */ (function (_super) {
1348
1398
  updatedRow = void 0;
1349
1399
  _h.label = 12;
1350
1400
  case 12:
1351
- _h.trys.push([12, 22, , 24]);
1401
+ _h.trys.push([12, 23, , 25]);
1352
1402
  (_a = this._subscribers) === null || _a === void 0 ? void 0 : _a.reportChanged();
1353
1403
  if (!this.isNew()) return [3 /*break*/, 14];
1354
1404
  return [4 /*yield*/, this.edp.insert(d)];
@@ -1386,23 +1436,25 @@ var rowHelperImplementation = /** @class */ (function (_super) {
1386
1436
  case 20:
1387
1437
  _h.sent();
1388
1438
  _h.label = 21;
1389
- case 21:
1439
+ case 21: return [4 /*yield*/, this.repository.remult.liveQueryPublisher.itemChanged(this.repository.metadata.key, [{ id: this.getId(), oldId: this.getOriginalId(), deleted: false }])];
1440
+ case 22:
1441
+ _h.sent();
1390
1442
  this.saveOriginalData();
1391
1443
  this._isNew = false;
1392
1444
  return [2 /*return*/, this.instance];
1393
- case 22:
1445
+ case 23:
1394
1446
  err_1 = _h.sent();
1395
1447
  return [4 /*yield*/, this.catchSaveErrors(err_1)];
1396
- case 23:
1448
+ case 24:
1397
1449
  _h.sent();
1398
- return [3 /*break*/, 24];
1399
- case 24: return [3 /*break*/, 26];
1400
- case 25:
1450
+ return [3 /*break*/, 25];
1451
+ case 25: return [3 /*break*/, 27];
1452
+ case 26:
1401
1453
  this.isLoading = false;
1402
1454
  this._reportChangedToEntityAndFields();
1403
1455
  this._saving = false;
1404
1456
  return [7 /*endfinally*/];
1405
- case 26: return [2 /*return*/];
1457
+ case 27: return [2 /*return*/];
1406
1458
  }
1407
1459
  });
1408
1460
  });
@@ -1427,7 +1479,7 @@ var rowHelperImplementation = /** @class */ (function (_super) {
1427
1479
  this.__assertValidity();
1428
1480
  _d.label = 3;
1429
1481
  case 3:
1430
- _d.trys.push([3, 15, , 17]);
1482
+ _d.trys.push([3, 16, , 18]);
1431
1483
  return [4 /*yield*/, this.edp.delete(this.id)];
1432
1484
  case 4:
1433
1485
  _d.sent();
@@ -1464,16 +1516,18 @@ var rowHelperImplementation = /** @class */ (function (_super) {
1464
1516
  }
1465
1517
  finally { if (e_23) throw e_23.error; }
1466
1518
  return [7 /*endfinally*/];
1467
- case 14:
1468
- this._wasDeleted = true;
1469
- return [3 /*break*/, 17];
1519
+ case 14: return [4 /*yield*/, this.repository.remult.liveQueryPublisher.itemChanged(this.repository.metadata.key, [{ id: this.getId(), oldId: this.getOriginalId(), deleted: true }])];
1470
1520
  case 15:
1521
+ _d.sent();
1522
+ this._wasDeleted = true;
1523
+ return [3 /*break*/, 18];
1524
+ case 16:
1471
1525
  err_2 = _d.sent();
1472
1526
  return [4 /*yield*/, this.catchSaveErrors(err_2)];
1473
- case 16:
1527
+ case 17:
1474
1528
  _d.sent();
1475
- return [3 /*break*/, 17];
1476
- case 17: return [2 /*return*/];
1529
+ return [3 /*break*/, 18];
1530
+ case 18: return [2 /*return*/];
1477
1531
  }
1478
1532
  });
1479
1533
  });
@@ -1528,18 +1582,14 @@ var rowHelperImplementation = /** @class */ (function (_super) {
1528
1582
  case 12: return [4 /*yield*/, this.calcServerExpression()];
1529
1583
  case 13:
1530
1584
  _d.sent();
1531
- if (this.repository.metadata.idMetadata.field instanceof column_1.CompoundIdField) {
1532
- this.id = this.repository.metadata.idMetadata.field.getId(this.instance);
1533
- }
1534
- else
1535
- this.id = data[this.repository.metadata.idMetadata.field.key];
1585
+ this.id = getId_1.getId(this.info, this.instance);
1536
1586
  return [2 /*return*/];
1537
1587
  }
1538
1588
  });
1539
1589
  });
1540
1590
  };
1541
1591
  rowHelperImplementation.prototype.getOriginalId = function () {
1542
- return this.id;
1592
+ return this.originalId;
1543
1593
  };
1544
1594
  rowHelperImplementation.prototype.calcServerExpression = function () {
1545
1595
  return tslib_1.__awaiter(this, void 0, void 0, function () {
@@ -1692,7 +1742,7 @@ function getFields(container, remult) {
1692
1742
  }
1693
1743
  exports.getFields = getFields;
1694
1744
  function getControllerRef(container, remultArg) {
1695
- var remultVar = remultArg || RepositoryImplementation.defaultRemult;
1745
+ var remultVar = remultArg || remult_proxy_1.remult;
1696
1746
  var result = container[controllerColumns];
1697
1747
  if (!result)
1698
1748
  result = container[entityMember];
@@ -2052,26 +2102,32 @@ var columnDefsImpl = /** @class */ (function () {
2052
2102
  this.caption = buildCaption(settings.caption, settings.key, remult);
2053
2103
  }
2054
2104
  columnDefsImpl.prototype.getDbName = function () {
2055
- var _this = this;
2056
- if (this.dbNamePromise)
2057
- return this.dbNamePromise;
2058
- this.dbNamePromise = (function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
2105
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
2106
+ var result;
2059
2107
  return tslib_1.__generator(this, function (_a) {
2060
- if (this.settings.sqlExpression) {
2061
- if (typeof this.settings.sqlExpression === "function") {
2062
- return [2 /*return*/, this.settings.sqlExpression(this.entityDefs)];
2063
- }
2064
- else
2065
- return [2 /*return*/, this.settings.sqlExpression];
2108
+ switch (_a.label) {
2109
+ case 0:
2110
+ _a.trys.push([0, , 5, 6]);
2111
+ if (!this.settings.sqlExpression) return [3 /*break*/, 4];
2112
+ result = void 0;
2113
+ if (!(typeof this.settings.sqlExpression === "function")) return [3 /*break*/, 2];
2114
+ return [4 /*yield*/, this.settings.sqlExpression(this.entityDefs)];
2115
+ case 1:
2116
+ result = _a.sent();
2117
+ return [3 /*break*/, 3];
2118
+ case 2:
2119
+ result = this.settings.sqlExpression;
2120
+ _a.label = 3;
2121
+ case 3:
2122
+ if (!result)
2123
+ return [2 /*return*/, this.settings.dbName];
2124
+ return [2 /*return*/, result];
2125
+ case 4: return [2 /*return*/, this.settings.dbName];
2126
+ case 5: return [7 /*endfinally*/];
2127
+ case 6: return [2 /*return*/];
2066
2128
  }
2067
- return [2 /*return*/, this.settings.dbName];
2068
2129
  });
2069
- }); })().then(function (x) {
2070
- if (x)
2071
- return x;
2072
- return _this.settings.dbName;
2073
2130
  });
2074
- return this.dbNamePromise;
2075
2131
  };
2076
2132
  Object.defineProperty(columnDefsImpl.prototype, "dbName", {
2077
2133
  get: function () {
@@ -2230,7 +2286,7 @@ var EntityFullInfo = /** @class */ (function () {
2230
2286
  if (typeof this.options.sqlExpression === "string")
2231
2287
  this.dbNamePromise = Promise.resolve(this.options.sqlExpression);
2232
2288
  else if (typeof this.options.sqlExpression === "function") {
2233
- var r = this.options.sqlExpression(this.fields);
2289
+ var r = this.options.sqlExpression(this);
2234
2290
  if (r instanceof Promise)
2235
2291
  this.dbNamePromise = r;
2236
2292
  else if (r)
@@ -2313,6 +2369,29 @@ var Fields = /** @class */ (function () {
2313
2369
  }
2314
2370
  return Field.apply(void 0, tslib_1.__spread([function () { return Number; }], options));
2315
2371
  };
2372
+ Fields.createdAt = function () {
2373
+ var options = [];
2374
+ for (var _i = 0; _i < arguments.length; _i++) {
2375
+ options[_i] = arguments[_i];
2376
+ }
2377
+ return Field.apply(void 0, tslib_1.__spread([function () { return Date; }, {
2378
+ saving: function (_, ref) {
2379
+ if (getEntityRef(_).isNew())
2380
+ ref.value = new Date();
2381
+ }
2382
+ }], options));
2383
+ };
2384
+ Fields.updatedAt = function () {
2385
+ var options = [];
2386
+ for (var _i = 0; _i < arguments.length; _i++) {
2387
+ options[_i] = arguments[_i];
2388
+ }
2389
+ return Field.apply(void 0, tslib_1.__spread([function () { return Date; }, {
2390
+ saving: function (_, ref) {
2391
+ ref.value = new Date();
2392
+ }
2393
+ }], options));
2394
+ };
2316
2395
  Fields.uuid = function () {
2317
2396
  var options = [];
2318
2397
  for (var _i = 0; _i < arguments.length; _i++) {
@@ -2320,7 +2399,25 @@ var Fields = /** @class */ (function () {
2320
2399
  }
2321
2400
  return Field.apply(void 0, tslib_1.__spread([function () { return String; }, {
2322
2401
  allowApiUpdate: false,
2323
- defaultValue: function () { return uuid_1.v4(); }
2402
+ defaultValue: function () { return uuid_1.v4(); },
2403
+ saving: function (_, r) {
2404
+ if (!r.value)
2405
+ r.value = uuid_1.v4();
2406
+ }
2407
+ }], options));
2408
+ };
2409
+ Fields.cuid = function () {
2410
+ var options = [];
2411
+ for (var _i = 0; _i < arguments.length; _i++) {
2412
+ options[_i] = arguments[_i];
2413
+ }
2414
+ return Field.apply(void 0, tslib_1.__spread([function () { return String; }, {
2415
+ allowApiUpdate: false,
2416
+ defaultValue: function () { return cuid_1.default(); },
2417
+ saving: function (_, r) {
2418
+ if (!r.value)
2419
+ r.value = cuid_1.default();
2420
+ }
2324
2421
  }], options));
2325
2422
  };
2326
2423
  Fields.string = function () {
@@ -2353,7 +2450,7 @@ function ValueListFieldType() {
2353
2450
  return function (type) {
2354
2451
  FieldType.apply(void 0, tslib_1.__spread([function (o) {
2355
2452
  o.valueConverter = ValueListInfo.get(type),
2356
- o.displayValue = function (item, val) { return val.caption; };
2453
+ o.displayValue = function (item, val) { return val === null || val === void 0 ? void 0 : val.caption; };
2357
2454
  }], options))(type);
2358
2455
  };
2359
2456
  }
@@ -2649,12 +2746,12 @@ function Entity(key) {
2649
2746
  }
2650
2747
  return function (target) {
2651
2748
  var _a;
2652
- for (var customFilterMember in target) {
2653
- if (Object.prototype.hasOwnProperty.call(target, customFilterMember)) {
2654
- var element = target[customFilterMember];
2655
- if ((_a = element === null || element === void 0 ? void 0 : element.customFilterInfo) === null || _a === void 0 ? void 0 : _a.customFilterTranslator) {
2656
- if (!element.customFilterInfo.key)
2657
- element.customFilterInfo.key = customFilterMember;
2749
+ for (var rawFilterMember in target) {
2750
+ if (Object.prototype.hasOwnProperty.call(target, rawFilterMember)) {
2751
+ var element = target[rawFilterMember];
2752
+ if ((_a = element === null || element === void 0 ? void 0 : element.rawFilterInfo) === null || _a === void 0 ? void 0 : _a.rawFilterTranslator) {
2753
+ if (!element.rawFilterInfo.key)
2754
+ element.rawFilterInfo.key = rawFilterMember;
2658
2755
  }
2659
2756
  }
2660
2757
  }
@@ -2724,7 +2821,7 @@ var EntityBase = /** @class */ (function () {
2724
2821
  exports.EntityBase = EntityBase;
2725
2822
  var ControllerBase = /** @class */ (function () {
2726
2823
  function ControllerBase(remult) {
2727
- this.remult = remult || RepositoryImplementation.defaultRemult;
2824
+ this.remult = remult || remult_proxy_1.remult;
2728
2825
  }
2729
2826
  ControllerBase.prototype.assign = function (values) {
2730
2827
  assign_1.assign(this, values);
@@ -2968,3 +3065,21 @@ var SubscribableImp = /** @class */ (function () {
2968
3065
  };
2969
3066
  return SubscribableImp;
2970
3067
  }());
3068
+ function getEntityMetadata(entity) {
3069
+ if (entity.metadata)
3070
+ return entity.metadata;
3071
+ var settings = getEntitySettings(entity, false);
3072
+ if (settings) {
3073
+ return remult_proxy_1.RemultProxy.defaultRemult.repo(entity).metadata;
3074
+ }
3075
+ return entity;
3076
+ }
3077
+ exports.getEntityMetadata = getEntityMetadata;
3078
+ function getRepository(entity) {
3079
+ var settings = getEntitySettings(entity, false);
3080
+ if (settings) {
3081
+ return remult_proxy_1.RemultProxy.defaultRemult.repo(entity);
3082
+ }
3083
+ return entity;
3084
+ }
3085
+ exports.getRepository = getRepository;
@@ -0,0 +1,2 @@
1
+ import type { EntityMetadata } from "./remult3";
2
+ export declare function getId<entityType>(meta: EntityMetadata<entityType>, instance: entityType): any;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getId = void 0;
4
+ var column_1 = require("../column");
5
+ function getId(meta, instance) {
6
+ if (meta.idMetadata.field instanceof column_1.CompoundIdField)
7
+ return meta.idMetadata.field.getId(instance);
8
+ else
9
+ return instance[meta.idMetadata.field.key];
10
+ }
11
+ exports.getId = getId;