remult 3.3.0-next.1 → 3.3.1

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 (38) hide show
  1. package/esm/graphql.js +1 -1
  2. package/esm/remult-knex/index.js +10 -3
  3. package/esm/remult-mongo.js +7 -3
  4. package/esm/server/get-remult-admin-html.js +125 -111
  5. package/esm/server/remult-admin.js +2 -0
  6. package/esm/server/remult-api-server.js +1 -1
  7. package/esm/src/data-api.js +30 -19
  8. package/esm/src/data-providers/rest-data-provider.js +48 -37
  9. package/esm/src/data-providers/sql-database.js +14 -3
  10. package/esm/src/live-query/SubscriptionChannel.js +52 -4
  11. package/esm/src/remult-proxy.js +4 -4
  12. package/esm/src/remult3/RepositoryImplementation.js +53 -25
  13. package/esm/src/server-action.js +2 -2
  14. package/esm/src/valueConverters.js +9 -5
  15. package/graphql.js +1 -1
  16. package/index.d.ts +1 -1
  17. package/package.json +1 -1
  18. package/remult-knex/index.js +18 -9
  19. package/remult-mongo.js +6 -2
  20. package/server/get-remult-admin-html.js +1 -1
  21. package/server/remult-admin.d.ts +2 -0
  22. package/server/remult-admin.js +2 -1
  23. package/server/remult-api-server.js +1 -0
  24. package/src/data-api.d.ts +4 -4
  25. package/src/data-api.js +50 -30
  26. package/src/data-interfaces.d.ts +6 -6
  27. package/src/data-providers/rest-data-provider.d.ts +4 -4
  28. package/src/data-providers/rest-data-provider.js +48 -37
  29. package/src/data-providers/sql-database.js +14 -3
  30. package/src/live-query/SubscriptionChannel.d.ts +52 -4
  31. package/src/live-query/SubscriptionChannel.js +52 -4
  32. package/src/remult-proxy.js +4 -4
  33. package/src/remult3/RepositoryImplementation.d.ts +11 -10
  34. package/src/remult3/RepositoryImplementation.js +237 -177
  35. package/src/remult3/remult3.d.ts +25 -23
  36. package/src/server-action.js +2 -2
  37. package/src/valueConverters.d.ts +3 -1
  38. package/src/valueConverters.js +9 -6
@@ -193,7 +193,7 @@ export function BackendMethod(options) {
193
193
  reg(controllerOptions.key +
194
194
  '/' +
195
195
  (options?.apiPrefix ? options.apiPrefix + '/' : '') +
196
- key, options ? options.queue ?? false : false, options.allowed, async (d, req, res) => {
196
+ key, options ? (options.queue ?? false) : false, options.allowed, async (d, req, res) => {
197
197
  d.args = d.args.map((x) => (isCustomUndefined(x) ? undefined : x));
198
198
  let allowed = options.allowed;
199
199
  try {
@@ -295,7 +295,7 @@ export function BackendMethod(options) {
295
295
  id: defs.getOriginalId(),
296
296
  },
297
297
  }, baseUrl, http);
298
- await defs._updateEntityBasedOnApi(r.rowInfo.data, true);
298
+ await defs._updateResultsFromServerAction(r.rowInfo);
299
299
  return r.result;
300
300
  }
301
301
  catch (err) {
@@ -1,4 +1,5 @@
1
1
  import { InputTypes } from '../inputTypes.js';
2
+ const zeroDate = new Date('0000-01-01');
2
3
  export class ValueConverters {
3
4
  static Date = {
4
5
  toJson: (val) => {
@@ -65,6 +66,8 @@ export class ValueConverters {
65
66
  fromJson: (value) => {
66
67
  if (!value || value == '' || value == '0000-00-00')
67
68
  return null;
69
+ if (value == '0000-01-01')
70
+ return zeroDate;
68
71
  let d = new Date(Date.parse(value));
69
72
  d.setMinutes(d.getMinutes() + d.getTimezoneOffset());
70
73
  return d;
@@ -88,6 +91,8 @@ export class ValueConverters {
88
91
  static DateOnlyString = {
89
92
  ...ValueConverters.DateOnly,
90
93
  toDb: (d) => {
94
+ if (d === zeroDate)
95
+ return '00000000';
91
96
  let val = ValueConverters.DateOnly.toJson(d);
92
97
  if (!val)
93
98
  return undefined;
@@ -98,12 +103,11 @@ export class ValueConverters {
98
103
  return null;
99
104
  if (!val)
100
105
  return undefined;
101
- return new Date(val.substring(0, 4) +
102
- '-' +
103
- val.substring(4, 6) +
104
- '-' +
105
- val.substring(6, 8));
106
+ if (val === '00000000')
107
+ return zeroDate;
108
+ return new Date(Number(val.substring(0, 4)), Number(val.substring(4, 6)) - 1, Number(val.substring(6, 8)));
106
109
  },
110
+ zeroDate,
107
111
  };
108
112
  static Boolean = {
109
113
  toDb: (val) => val,
package/graphql.js CHANGED
@@ -443,7 +443,7 @@ function remultGraphql(options) {
443
443
  setResult((_a = {},
444
444
  _a[toCamelCase(getMetaType(meta))] = y,
445
445
  _a));
446
- } }), arg1.id, arg1.patch)];
446
+ } }), { get: function () { return undefined; } }, arg1.id, arg1.patch)];
447
447
  case 1:
448
448
  _a.sent();
449
449
  return [2 /*return*/];
package/index.d.ts CHANGED
@@ -2,7 +2,7 @@ import type { ClassType } from './classType.js';
2
2
  import type { DataProvider } from './src/data-interfaces.js';
3
3
  export { ArrayEntityDataProvider } from './src/data-providers/array-entity-data-provider.js';
4
4
  export type { ClassType } from './classType.js';
5
- export { ValidateFieldEvent, MembersOnly, NumericKeys, FieldsMetadata, FieldRef, IdFieldRef, FieldsRef, EntityMetadata, EntityOrderBy, EntityFilter, FindOptions, FindOptionsBase, QueryResult, QueryOptions, UpsertOptions, Repository, GroupByOptions, GroupByResult, FindFirstOptions, ComparisonValueFilter, ValueFilter, IdFilter, ContainsStringValueFilter, EntityRef, SortSegments, Paginator, LiveQuery, LiveQueryChangeInfo, Subscribable, RefSubscriber, RefSubscriberBase, RelationOptions, ObjectMembersOnly, MembersToInclude, RepositoryRelations, EntityIdFields, EntitySelectFields, ClassFieldDecorator, ClassFieldDecoratorContextStub, //n1 consider removing in ts5
5
+ export { ValidateFieldEvent, MembersOnly, NumericKeys, FieldsMetadata, FieldRef, IdFieldRef, FieldsRef, EntityMetadata, EntityOrderBy, EntityFilter, FindOptions, FindOptionsBase, QueryResult, QueryOptions, UpsertOptions, Repository, GroupByOptions, GroupByResult, FindFirstOptions, ComparisonValueFilter, ValueFilter, IdFilter, ContainsStringValueFilter, EntityRef, SortSegments, Paginator, LiveQuery, LiveQueryChangeInfo, Subscribable, RefSubscriber, RefSubscriberBase, RelationOptions, ObjectMembersOnly, MembersToInclude, RepositoryRelations, EntityIdFields, EntitySelectFields, InsertOrUpdateOptions, ClassFieldDecorator, ClassFieldDecoratorContextStub, //n1 consider removing in ts5
6
6
  LifecycleEvent, FieldsRefBase, FieldsRefForEntityBase, RepositoryRelationsForEntityBase, ControllerRefForControllerBase, ControllerRefBase, ControllerRef, EntityRefForEntityBase, IdMetadata, FindFirstOptionsBase, } from './src/remult3/remult3.js';
7
7
  export { standardSchema } from './src/standard-schema/index.js';
8
8
  export { EntityBase, ControllerBase, FieldType, getFields, ValueListFieldType, getValueList, ValueListFieldOptions, ValueListInfo, } from './src/remult3/RepositoryImplementation.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "remult",
3
- "version": "3.3.0-next.1",
3
+ "version": "3.3.1",
4
4
  "description": "A CRUD framework for full-stack TypeScript",
5
5
  "homepage": "https://remult.dev",
6
6
  "repository": {
@@ -354,7 +354,7 @@ var KnexEntityDataProvider = /** @class */ (function () {
354
354
  });
355
355
  });
356
356
  };
357
- KnexEntityDataProvider.prototype.update = function (id, data) {
357
+ KnexEntityDataProvider.prototype.update = function (id, data, options) {
358
358
  return tslib_1.__awaiter(this, void 0, void 0, function () {
359
359
  var e, f, updateObject, _a, _b, x, v, key, e_4_1, where;
360
360
  var e_4, _c;
@@ -407,6 +407,8 @@ var KnexEntityDataProvider = /** @class */ (function () {
407
407
  .where(function (b) { return where.forEach(function (w) { return w(b); }); })];
408
408
  case 12:
409
409
  _d.sent();
410
+ if ((options === null || options === void 0 ? void 0 : options.select) === 'none')
411
+ return [2 /*return*/, undefined];
410
412
  return [2 /*return*/, (0, sql_database_js_1.getRowAfterUpdate)(this.entity, this, data, id, 'update')];
411
413
  }
412
414
  });
@@ -435,7 +437,7 @@ var KnexEntityDataProvider = /** @class */ (function () {
435
437
  });
436
438
  });
437
439
  };
438
- KnexEntityDataProvider.prototype.insert = function (data) {
440
+ KnexEntityDataProvider.prototype.insert = function (data, options) {
439
441
  return tslib_1.__awaiter(this, void 0, void 0, function () {
440
442
  var e, insertObject, _a, _b, x, v, key, e_5_1, insert, newId_1, result, result;
441
443
  var e_5, _c;
@@ -480,7 +482,8 @@ var KnexEntityDataProvider = /** @class */ (function () {
480
482
  return [7 /*endfinally*/];
481
483
  case 10:
482
484
  insert = this.getEntityFrom(e).insert(insertObject);
483
- if (!(0, RepositoryImplementation_js_1.isAutoIncrement)(this.entity.idMetadata.field)) return [3 /*break*/, 15];
485
+ if (!((0, RepositoryImplementation_js_1.isAutoIncrement)(this.entity.idMetadata.field) &&
486
+ !((options === null || options === void 0 ? void 0 : options.select) === 'none'))) return [3 /*break*/, 15];
484
487
  if (!(this.knex.client.config.client === 'mysql2' ||
485
488
  this.knex.client.config.client === 'mysql')) return [3 /*break*/, 12];
486
489
  return [4 /*yield*/, insert];
@@ -493,16 +496,22 @@ var KnexEntityDataProvider = /** @class */ (function () {
493
496
  result = _d.sent();
494
497
  newId_1 = result[0][this.entity.idMetadata.field.dbName];
495
498
  _d.label = 14;
496
- case 14: return [2 /*return*/, this.find({
497
- where: new filter_interfaces_js_1.Filter(function (x) {
498
- return x.isEqualTo(_this.entity.idMetadata.field, newId_1);
499
- }),
500
- }).then(function (y) { return y[0]; })];
499
+ case 14:
500
+ if ((options === null || options === void 0 ? void 0 : options.select) === 'none')
501
+ return [2 /*return*/, undefined];
502
+ return [2 /*return*/, this.find({
503
+ where: new filter_interfaces_js_1.Filter(function (x) {
504
+ return x.isEqualTo(_this.entity.idMetadata.field, newId_1);
505
+ }),
506
+ }).then(function (y) { return y[0]; })];
501
507
  case 15: return [4 /*yield*/, insert];
502
508
  case 16:
503
509
  _d.sent();
504
510
  _d.label = 17;
505
- case 17: return [2 /*return*/, (0, sql_database_js_1.getRowAfterUpdate)(this.entity, this, data, undefined, 'insert')];
511
+ case 17:
512
+ if ((options === null || options === void 0 ? void 0 : options.select) === 'none')
513
+ return [2 /*return*/, undefined];
514
+ return [2 /*return*/, (0, sql_database_js_1.getRowAfterUpdate)(this.entity, this, data, undefined, 'insert')];
506
515
  }
507
516
  });
508
517
  });
package/remult-mongo.js CHANGED
@@ -476,7 +476,7 @@ var MongoEntityDataProvider = /** @class */ (function () {
476
476
  });
477
477
  });
478
478
  };
479
- MongoEntityDataProvider.prototype.update = function (id, data) {
479
+ MongoEntityDataProvider.prototype.update = function (id, data, options) {
480
480
  return tslib_1.__awaiter(this, void 0, void 0, function () {
481
481
  var _a, collection, e, f, newR, keys, _b, _c, f_1, r, _d, _e;
482
482
  var e_11, _f;
@@ -514,6 +514,8 @@ var MongoEntityDataProvider = /** @class */ (function () {
514
514
  { session: this.session }])];
515
515
  case 3:
516
516
  r = _g.sent();
517
+ if ((options === null || options === void 0 ? void 0 : options.select) === 'none')
518
+ return [2 /*return*/, undefined];
517
519
  return [2 /*return*/, (0, sql_database_js_1.getRowAfterUpdate)(this.entity, this, data, id, 'update')];
518
520
  }
519
521
  });
@@ -541,7 +543,7 @@ var MongoEntityDataProvider = /** @class */ (function () {
541
543
  });
542
544
  });
543
545
  };
544
- MongoEntityDataProvider.prototype.insert = function (data) {
546
+ MongoEntityDataProvider.prototype.insert = function (data, options) {
545
547
  return tslib_1.__awaiter(this, void 0, void 0, function () {
546
548
  var _a, collection, e, r, _b, _c, _d;
547
549
  return tslib_1.__generator(this, function (_e) {
@@ -556,6 +558,8 @@ var MongoEntityDataProvider = /** @class */ (function () {
556
558
  }])];
557
559
  case 3:
558
560
  r = _e.sent();
561
+ if ((options === null || options === void 0 ? void 0 : options.select) === 'none')
562
+ return [2 /*return*/, undefined];
559
563
  _d = this.translateFromDb;
560
564
  return [4 /*yield*/, collection.findOne({ _id: r.insertedId }, { session: this.session })];
561
565
  case 4: return [4 /*yield*/, _d.apply(this, [_e.sent(), e])];