remult 0.13.5 → 0.13.6

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "remult",
3
- "version": "0.13.5",
3
+ "version": "0.13.6",
4
4
  "description": "remult core lib",
5
5
  "homepage": "https://remult.dev/",
6
6
  "repository": {
package/readme.md CHANGED
@@ -54,17 +54,17 @@ app.listen(port, () => {
54
54
 
55
55
  ## Define model classes
56
56
  ```ts
57
- import { Entity, EntityBase, Field } from 'remult';
57
+ import { Entity, EntityBase, Fields } from 'remult';
58
58
 
59
59
  @Entity('products', {
60
60
  allowApiCrud: true
61
61
  })
62
62
  export class Product extends EntityBase {
63
- @Field()
64
- name: string = '';
63
+ @Fields.string()
64
+ name = '';
65
65
 
66
- @Field()
67
- unitPrice: number = 0;
66
+ @Fields.number()
67
+ unitPrice = 0;
68
68
  }
69
69
  ```
70
70
 
@@ -106,17 +106,17 @@ import { Min } from 'class-validator';
106
106
  allowApiCrud: true
107
107
  })
108
108
  export class Product extends EntityBase {
109
- @Field<Product>({
109
+ @Fields.string<Product>({
110
110
  validate: p => {
111
111
  if (p.name.trim().length == 0)
112
112
  p.$.name.error = 'required';
113
113
  }
114
114
  })
115
- name: string = '';
115
+ name = '';
116
116
 
117
- @Field()
117
+ @Fields.number()
118
118
  @Min(0)
119
- unitPrice: number = 0;
119
+ unitPrice = 0;
120
120
  }
121
121
  ```
122
122
 
@@ -147,13 +147,13 @@ catch {
147
147
  allowApiUpdate: (remult, article) => article.author.id == remult.user.id
148
148
  })
149
149
  export class Article extends EntityBase {
150
- @Field({ allowApiUpdate: false })
151
- slug: string;
150
+ @Fields.string({ allowApiUpdate: false })
151
+ slug = '';
152
152
 
153
- @Field({ allowApiUpdate: false })
154
- author: Profile;
153
+ @Field(() => Profile, { allowApiUpdate: false })
154
+ author!: Profile;
155
155
 
156
- @Field()
157
- content: string;
156
+ @Fields.string()
157
+ content = '';
158
158
  }
159
159
  ```
@@ -375,7 +375,7 @@ var FilterConsumerBridgeToKnexRequest = /** @class */ (function () {
375
375
  FilterConsumerBridgeToKnexRequest.prototype.or = function (orElements) {
376
376
  var _this = this;
377
377
  this.promises.push((function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
378
- var result, _loop_1, this_1, orElements_1, orElements_1_1, element, e_5_1;
378
+ var result, _loop_1, this_1, orElements_1, orElements_1_1, element, state_1, e_5_1;
379
379
  var e_5, _a;
380
380
  return tslib_1.__generator(this, function (_b) {
381
381
  switch (_b.label) {
@@ -399,6 +399,8 @@ var FilterConsumerBridgeToKnexRequest = /** @class */ (function () {
399
399
  });
400
400
  });
401
401
  }
402
+ else
403
+ return [2 /*return*/, { value: void 0 }]; //empty or means all rows
402
404
  return [2 /*return*/];
403
405
  }
404
406
  });
@@ -414,7 +416,9 @@ var FilterConsumerBridgeToKnexRequest = /** @class */ (function () {
414
416
  element = orElements_1_1.value;
415
417
  return [5 /*yield**/, _loop_1(element)];
416
418
  case 3:
417
- _b.sent();
419
+ state_1 = _b.sent();
420
+ if (typeof state_1 === "object")
421
+ return [2 /*return*/, state_1.value];
418
422
  _b.label = 4;
419
423
  case 4:
420
424
  orElements_1_1 = orElements_1.next();
package/remult-mongo.js CHANGED
@@ -339,15 +339,16 @@ var FilterConsumerBridgeToMongo = /** @class */ (function () {
339
339
  this.promises.push((function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
340
340
  var result, orElements_1, orElements_1_1, element, f, where, e_7_1;
341
341
  var e_7, _a;
342
- return tslib_1.__generator(this, function (_b) {
343
- switch (_b.label) {
342
+ var _b;
343
+ return tslib_1.__generator(this, function (_c) {
344
+ switch (_c.label) {
344
345
  case 0:
345
346
  result = [];
346
- _b.label = 1;
347
+ _c.label = 1;
347
348
  case 1:
348
- _b.trys.push([1, 6, 7, 8]);
349
+ _c.trys.push([1, 6, 7, 8]);
349
350
  orElements_1 = tslib_1.__values(orElements), orElements_1_1 = orElements_1.next();
350
- _b.label = 2;
351
+ _c.label = 2;
351
352
  case 2:
352
353
  if (!!orElements_1_1.done) return [3 /*break*/, 5];
353
354
  element = orElements_1_1.value;
@@ -356,17 +357,19 @@ var FilterConsumerBridgeToMongo = /** @class */ (function () {
356
357
  element.__applyToConsumer(f);
357
358
  return [4 /*yield*/, f.resolveWhere()];
358
359
  case 3:
359
- where = _b.sent();
360
- if ((where === null || where === void 0 ? void 0 : where.$and.length) > 0) {
360
+ where = _c.sent();
361
+ if (((_b = where === null || where === void 0 ? void 0 : where.$and) === null || _b === void 0 ? void 0 : _b.length) > 0) {
361
362
  result.push(where);
362
363
  }
363
- _b.label = 4;
364
+ else
365
+ return [2 /*return*/]; //since empty or is all rows;
366
+ _c.label = 4;
364
367
  case 4:
365
368
  orElements_1_1 = orElements_1.next();
366
369
  return [3 /*break*/, 2];
367
370
  case 5: return [3 /*break*/, 8];
368
371
  case 6:
369
- e_7_1 = _b.sent();
372
+ e_7_1 = _c.sent();
370
373
  e_7 = { error: e_7_1 };
371
374
  return [3 /*break*/, 8];
372
375
  case 7:
@@ -806,35 +806,35 @@ var JobsInQueueEntity = /** @class */ (function (_super) {
806
806
  return _super !== null && _super.apply(this, arguments) || this;
807
807
  }
808
808
  tslib_1.__decorate([
809
- remult3_1.Fields.String(),
809
+ remult3_1.Fields.string(),
810
810
  tslib_1.__metadata("design:type", String)
811
811
  ], JobsInQueueEntity.prototype, "userId", void 0);
812
812
  tslib_1.__decorate([
813
- remult3_1.Fields.String(),
813
+ remult3_1.Fields.string(),
814
814
  tslib_1.__metadata("design:type", String)
815
815
  ], JobsInQueueEntity.prototype, "url", void 0);
816
816
  tslib_1.__decorate([
817
- remult3_1.Fields.Date(),
817
+ remult3_1.Fields.date(),
818
818
  tslib_1.__metadata("design:type", Date)
819
819
  ], JobsInQueueEntity.prototype, "submitTime", void 0);
820
820
  tslib_1.__decorate([
821
- remult3_1.Fields.Date(),
821
+ remult3_1.Fields.date(),
822
822
  tslib_1.__metadata("design:type", Date)
823
823
  ], JobsInQueueEntity.prototype, "doneTime", void 0);
824
824
  tslib_1.__decorate([
825
- remult3_1.Fields.String(),
825
+ remult3_1.Fields.string(),
826
826
  tslib_1.__metadata("design:type", String)
827
827
  ], JobsInQueueEntity.prototype, "result", void 0);
828
828
  tslib_1.__decorate([
829
- remult3_1.Fields.Boolean(),
829
+ remult3_1.Fields.boolean(),
830
830
  tslib_1.__metadata("design:type", Boolean)
831
831
  ], JobsInQueueEntity.prototype, "done", void 0);
832
832
  tslib_1.__decorate([
833
- remult3_1.Fields.Boolean(),
833
+ remult3_1.Fields.boolean(),
834
834
  tslib_1.__metadata("design:type", Boolean)
835
835
  ], JobsInQueueEntity.prototype, "error", void 0);
836
836
  tslib_1.__decorate([
837
- remult3_1.Fields.Number(),
837
+ remult3_1.Fields.number(),
838
838
  tslib_1.__metadata("design:type", Number)
839
839
  ], JobsInQueueEntity.prototype, "progress", void 0);
840
840
  JobsInQueueEntity = tslib_1.__decorate([
package/src/context.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { DataProvider } from "./data-interfaces";
2
- import { EntityRef, Repository } from "./remult3";
2
+ import { EntityMetadata, EntityRef, FindOptions, Repository } from "./remult3";
3
3
  import { ClassType } from "../classType";
4
4
  export interface HttpProvider {
5
5
  post(url: string, data: any): Promise<any> | {
@@ -21,6 +21,7 @@ export declare function toPromise<T>(p: Promise<T> | {
21
21
  export declare function processHttpException(ex: any): Promise<any>;
22
22
  export declare function isBackend(): boolean;
23
23
  export declare class Remult {
24
+ static onFind: (metadata: EntityMetadata, options: FindOptions<any>) => void;
24
25
  clearAllCache(): any;
25
26
  static entityRefInit?: (ref: EntityRef<any>, row: any) => void;
26
27
  authenticated(): boolean;
package/src/context.js CHANGED
@@ -283,6 +283,7 @@ var Remult = /** @class */ (function () {
283
283
  }
284
284
  return r;
285
285
  };
286
+ Remult.onFind = function (metadata, options) { };
286
287
  Remult.apiBaseUrl = '/api';
287
288
  return Remult;
288
289
  }());
@@ -76,6 +76,8 @@ var FilterConsumerBridgeToSqlRequest = /** @class */ (function () {
76
76
  return [4 /*yield*/, f.resolveWhere()];
77
77
  case 2:
78
78
  where = _b.sent();
79
+ if (!where)
80
+ return [2 /*return*/]; //since if any member of or is empty, then the entire or is irrelevant
79
81
  if (where.length > 0) {
80
82
  if (statement.length > 0) {
81
83
  statement += " or ";
package/src/id-entity.js CHANGED
@@ -9,7 +9,7 @@ var IdEntity = /** @class */ (function (_super) {
9
9
  return _super !== null && _super.apply(this, arguments) || this;
10
10
  }
11
11
  tslib_1.__decorate([
12
- remult3_1.Fields.Uuid(),
12
+ remult3_1.Fields.uuid(),
13
13
  tslib_1.__metadata("design:type", String)
14
14
  ], IdEntity.prototype, "id", void 0);
15
15
  return IdEntity;
@@ -210,15 +210,15 @@ export declare const Fields1: {
210
210
  String: () => (a: any) => void;
211
211
  };
212
212
  export declare class Fields {
213
- static Object<entityType = any, valueType = any>(...options: (FieldOptions<entityType, valueType> | ((options: FieldOptions<entityType, valueType>, remult: Remult) => void))[]): (target: any, key: any, c?: any) => void;
214
- static DateOnly<entityType = any>(...options: (FieldOptions<entityType, Date> | ((options: FieldOptions<entityType, Date>, remult: Remult) => void))[]): (target: any, key: any, c?: any) => void;
215
- static Date<entityType = any>(...options: (FieldOptions<entityType, Date> | ((options: FieldOptions<entityType, Date>, remult: Remult) => void))[]): (target: any, key: any, c?: any) => void;
216
- static Integer<entityType = any>(...options: (FieldOptions<entityType, Number> | ((options: FieldOptions<entityType, Number>, remult: Remult) => void))[]): (target: any, key: any, c?: any) => void;
217
- static AutoIncrement<entityType = any>(...options: (FieldOptions<entityType, Number> | ((options: FieldOptions<entityType, Number>, remult: Remult) => void))[]): (target: any, key: any, c?: any) => void;
218
- static Number<entityType = any>(...options: (FieldOptions<entityType, Number> | ((options: FieldOptions<entityType, Number>, remult: Remult) => void))[]): (target: any, key: any, c?: any) => void;
219
- static Uuid<entityType = any>(...options: (FieldOptions<entityType, string> | ((options: FieldOptions<entityType, string>, remult: Remult) => void))[]): (target: any, key: any, c?: any) => void;
220
- static String<entityType = any>(...options: (StringFieldOptions<entityType> | ((options: StringFieldOptions<entityType>, remult: Remult) => void))[]): (target: any, key: any, c?: any) => void;
221
- static Boolean<entityType = any>(...options: (FieldOptions<entityType, boolean> | ((options: FieldOptions<entityType, boolean>, remult: Remult) => void))[]): (target: any, key: any, c?: any) => void;
213
+ static object<entityType = any, valueType = any>(...options: (FieldOptions<entityType, valueType> | ((options: FieldOptions<entityType, valueType>, remult: Remult) => void))[]): (target: any, key: any, c?: any) => void;
214
+ static dateOnly<entityType = any>(...options: (FieldOptions<entityType, Date> | ((options: FieldOptions<entityType, Date>, remult: Remult) => void))[]): (target: any, key: any, c?: any) => void;
215
+ static date<entityType = any>(...options: (FieldOptions<entityType, Date> | ((options: FieldOptions<entityType, Date>, remult: Remult) => void))[]): (target: any, key: any, c?: any) => void;
216
+ static integer<entityType = any>(...options: (FieldOptions<entityType, Number> | ((options: FieldOptions<entityType, Number>, remult: Remult) => void))[]): (target: any, key: any, c?: any) => void;
217
+ static autoIncrement<entityType = any>(...options: (FieldOptions<entityType, Number> | ((options: FieldOptions<entityType, Number>, remult: Remult) => void))[]): (target: any, key: any, c?: any) => void;
218
+ static number<entityType = any>(...options: (FieldOptions<entityType, Number> | ((options: FieldOptions<entityType, Number>, remult: Remult) => void))[]): (target: any, key: any, c?: any) => void;
219
+ static uuid<entityType = any>(...options: (FieldOptions<entityType, string> | ((options: FieldOptions<entityType, string>, remult: Remult) => void))[]): (target: any, key: any, c?: any) => void;
220
+ static string<entityType = any>(...options: (StringFieldOptions<entityType> | ((options: StringFieldOptions<entityType>, remult: Remult) => void))[]): (target: any, key: any, c?: any) => void;
221
+ static boolean<entityType = any>(...options: (FieldOptions<entityType, boolean> | ((options: FieldOptions<entityType, boolean>, remult: Remult) => void))[]): (target: any, key: any, c?: any) => void;
222
222
  }
223
223
  export declare function isAutoIncrement(f: FieldMetadata): boolean;
224
224
  export interface StringFieldOptions<entityType = any> extends FieldOptions<entityType, string> {
@@ -235,6 +235,8 @@ export declare class ValueListInfo<T extends ValueListItem> implements ValueConv
235
235
  private values;
236
236
  isNumeric: boolean;
237
237
  private constructor();
238
+ private loadedFromOptions;
239
+ private loadFromDecoratorOptions;
238
240
  getValues(): T[];
239
241
  byId(key: any): T;
240
242
  fromJson(val: any): T;
@@ -274,12 +274,41 @@ var RepositoryImplementation = /** @class */ (function () {
274
274
  };
275
275
  RepositoryImplementation.prototype.find = function (options) {
276
276
  return tslib_1.__awaiter(this, void 0, void 0, function () {
277
- var opt, _a, rawRows, loadFields, _b, _c, col, ei, load, repo, toLoad, rawRows_1, rawRows_1_1, r, val, rows, rows_1, rows_1_1, r, e_4_1, result;
278
- var e_4, _d, e_5, _e, _f, e_6, _g;
277
+ function loadManyToOne(repo, toLoad) {
278
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
279
+ var rows, rows_1, rows_1_1, r;
280
+ var _a, e_6, _b;
281
+ return tslib_1.__generator(this, function (_c) {
282
+ switch (_c.label) {
283
+ case 0: return [4 /*yield*/, repo.find({ where: (_a = repo.metadata.idMetadata).getIdFilter.apply(_a, tslib_1.__spread(toLoad)) })];
284
+ case 1:
285
+ rows = _c.sent();
286
+ try {
287
+ for (rows_1 = tslib_1.__values(rows), rows_1_1 = rows_1.next(); !rows_1_1.done; rows_1_1 = rows_1.next()) {
288
+ r = rows_1_1.value;
289
+ repo.addToCache(r);
290
+ }
291
+ }
292
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
293
+ finally {
294
+ try {
295
+ if (rows_1_1 && !rows_1_1.done && (_b = rows_1.return)) _b.call(rows_1);
296
+ }
297
+ finally { if (e_6) throw e_6.error; }
298
+ }
299
+ return [2 /*return*/];
300
+ }
301
+ });
302
+ });
303
+ }
304
+ var opt, _a, rawRows, loadFields, _b, _c, col, ei, load, repo, toLoad, rawRows_1, rawRows_1_1, r, val, e_4_1, result;
305
+ var e_4, _d, e_5, _e;
279
306
  var _this = this;
280
- return tslib_1.__generator(this, function (_h) {
281
- switch (_h.label) {
307
+ return tslib_1.__generator(this, function (_f) {
308
+ switch (_f.label) {
282
309
  case 0:
310
+ context_1.Remult.onFind(this._info, options);
311
+ ;
283
312
  opt = {};
284
313
  if (!options)
285
314
  options = {};
@@ -290,21 +319,21 @@ var RepositoryImplementation = /** @class */ (function () {
290
319
  _a = opt;
291
320
  return [4 /*yield*/, this.translateWhereToFilter(options.where)];
292
321
  case 1:
293
- _a.where = _h.sent();
322
+ _a.where = _f.sent();
294
323
  opt.orderBy = sort_1.Sort.translateOrderByToSort(this.metadata, options.orderBy);
295
324
  opt.limit = options.limit;
296
325
  opt.page = options.page;
297
326
  return [4 /*yield*/, this.edp.find(opt)];
298
327
  case 2:
299
- rawRows = _h.sent();
328
+ rawRows = _f.sent();
300
329
  loadFields = undefined;
301
330
  if (options.load)
302
331
  loadFields = options.load(this.metadata.fields);
303
- _h.label = 3;
332
+ _f.label = 3;
304
333
  case 3:
305
- _h.trys.push([3, 8, 9, 10]);
334
+ _f.trys.push([3, 8, 9, 10]);
306
335
  _b = tslib_1.__values(this.metadata.fields), _c = _b.next();
307
- _h.label = 4;
336
+ _f.label = 4;
308
337
  case 4:
309
338
  if (!!_c.done) return [3 /*break*/, 7];
310
339
  col = _c.value;
@@ -333,29 +362,16 @@ var RepositoryImplementation = /** @class */ (function () {
333
362
  finally { if (e_5) throw e_5.error; }
334
363
  }
335
364
  if (!(toLoad.length > 0)) return [3 /*break*/, 6];
336
- return [4 /*yield*/, repo.find({ where: (_f = repo.metadata.idMetadata).getIdFilter.apply(_f, tslib_1.__spread(toLoad)) })];
365
+ return [4 /*yield*/, loadManyToOne(repo, toLoad)];
337
366
  case 5:
338
- rows = _h.sent();
339
- try {
340
- for (rows_1 = (e_6 = void 0, tslib_1.__values(rows)), rows_1_1 = rows_1.next(); !rows_1_1.done; rows_1_1 = rows_1.next()) {
341
- r = rows_1_1.value;
342
- repo.addToCache(r);
343
- }
344
- }
345
- catch (e_6_1) { e_6 = { error: e_6_1 }; }
346
- finally {
347
- try {
348
- if (rows_1_1 && !rows_1_1.done && (_g = rows_1.return)) _g.call(rows_1);
349
- }
350
- finally { if (e_6) throw e_6.error; }
351
- }
352
- _h.label = 6;
367
+ _f.sent();
368
+ _f.label = 6;
353
369
  case 6:
354
370
  _c = _b.next();
355
371
  return [3 /*break*/, 4];
356
372
  case 7: return [3 /*break*/, 10];
357
373
  case 8:
358
- e_4_1 = _h.sent();
374
+ e_4_1 = _f.sent();
359
375
  e_4 = { error: e_4_1 };
360
376
  return [3 /*break*/, 10];
361
377
  case 9:
@@ -371,7 +387,7 @@ var RepositoryImplementation = /** @class */ (function () {
371
387
  }
372
388
  }); }); }))];
373
389
  case 11:
374
- result = _h.sent();
390
+ result = _f.sent();
375
391
  return [2 /*return*/, result];
376
392
  }
377
393
  });
@@ -2165,14 +2181,14 @@ exports.Fields1 = {
2165
2181
  var Fields = /** @class */ (function () {
2166
2182
  function Fields() {
2167
2183
  }
2168
- Fields.Object = function () {
2184
+ Fields.object = function () {
2169
2185
  var options = [];
2170
2186
  for (var _i = 0; _i < arguments.length; _i++) {
2171
2187
  options[_i] = arguments[_i];
2172
2188
  }
2173
2189
  return Field.apply(void 0, tslib_1.__spread([undefined], options));
2174
2190
  };
2175
- Fields.DateOnly = function () {
2191
+ Fields.dateOnly = function () {
2176
2192
  var options = [];
2177
2193
  for (var _i = 0; _i < arguments.length; _i++) {
2178
2194
  options[_i] = arguments[_i];
@@ -2181,14 +2197,14 @@ var Fields = /** @class */ (function () {
2181
2197
  valueConverter: valueConverters_1.ValueConverters.DateOnly
2182
2198
  }], options));
2183
2199
  };
2184
- Fields.Date = function () {
2200
+ Fields.date = function () {
2185
2201
  var options = [];
2186
2202
  for (var _i = 0; _i < arguments.length; _i++) {
2187
2203
  options[_i] = arguments[_i];
2188
2204
  }
2189
2205
  return Field.apply(void 0, tslib_1.__spread([function () { return Date; }], options));
2190
2206
  };
2191
- Fields.Integer = function () {
2207
+ Fields.integer = function () {
2192
2208
  var options = [];
2193
2209
  for (var _i = 0; _i < arguments.length; _i++) {
2194
2210
  options[_i] = arguments[_i];
@@ -2197,7 +2213,7 @@ var Fields = /** @class */ (function () {
2197
2213
  valueConverter: valueConverters_1.ValueConverters.Integer
2198
2214
  }], options));
2199
2215
  };
2200
- Fields.AutoIncrement = function () {
2216
+ Fields.autoIncrement = function () {
2201
2217
  var options = [];
2202
2218
  for (var _i = 0; _i < arguments.length; _i++) {
2203
2219
  options[_i] = arguments[_i];
@@ -2208,14 +2224,14 @@ var Fields = /** @class */ (function () {
2208
2224
  valueConverter: tslib_1.__assign(tslib_1.__assign({}, valueConverters_1.ValueConverters.Integer), { fieldTypeInDb: 'autoincrement' })
2209
2225
  }], options));
2210
2226
  };
2211
- Fields.Number = function () {
2227
+ Fields.number = function () {
2212
2228
  var options = [];
2213
2229
  for (var _i = 0; _i < arguments.length; _i++) {
2214
2230
  options[_i] = arguments[_i];
2215
2231
  }
2216
2232
  return Field.apply(void 0, tslib_1.__spread([function () { return Number; }], options));
2217
2233
  };
2218
- Fields.Uuid = function () {
2234
+ Fields.uuid = function () {
2219
2235
  var options = [];
2220
2236
  for (var _i = 0; _i < arguments.length; _i++) {
2221
2237
  options[_i] = arguments[_i];
@@ -2225,14 +2241,14 @@ var Fields = /** @class */ (function () {
2225
2241
  defaultValue: function () { return uuid_1.v4(); }
2226
2242
  }], options));
2227
2243
  };
2228
- Fields.String = function () {
2244
+ Fields.string = function () {
2229
2245
  var options = [];
2230
2246
  for (var _i = 0; _i < arguments.length; _i++) {
2231
2247
  options[_i] = arguments[_i];
2232
2248
  }
2233
2249
  return Field.apply(void 0, tslib_1.__spread([function () { return String; }], options));
2234
2250
  };
2235
- Fields.Boolean = function () {
2251
+ Fields.boolean = function () {
2236
2252
  var options = [];
2237
2253
  for (var _i = 0; _i < arguments.length; _i++) {
2238
2254
  options[_i] = arguments[_i];
@@ -2262,20 +2278,20 @@ function ValueListFieldType() {
2262
2278
  exports.ValueListFieldType = ValueListFieldType;
2263
2279
  var ValueListInfo = /** @class */ (function () {
2264
2280
  function ValueListInfo(valueListType) {
2265
- var e_30, _a;
2266
2281
  this.valueListType = valueListType;
2267
2282
  this.byIdMap = new Map();
2268
2283
  this.values = [];
2269
2284
  this.isNumeric = false;
2285
+ this.loadedFromOptions = false;
2270
2286
  for (var member in this.valueListType) {
2271
2287
  var s = this.valueListType[member];
2272
2288
  if (s instanceof this.valueListType) {
2273
2289
  if (s.id === undefined)
2274
2290
  s.id = member;
2275
- if (s.caption === undefined)
2276
- s.caption = column_1.makeTitle(member);
2277
2291
  if (typeof s.id === 'number')
2278
2292
  this.isNumeric = true;
2293
+ if (s.caption === undefined)
2294
+ s.caption = column_1.makeTitle(s.id !== undefined ? s.id.toString() : member);
2279
2295
  this.byIdMap.set(s.id, s);
2280
2296
  this.values.push(s);
2281
2297
  }
@@ -2283,13 +2299,32 @@ var ValueListInfo = /** @class */ (function () {
2283
2299
  if (this.isNumeric) {
2284
2300
  this.fieldTypeInDb = 'integer';
2285
2301
  }
2286
- var options = Reflect.getMetadata(exports.storableMember, valueListType);
2287
- if (options)
2302
+ }
2303
+ ValueListInfo.get = function (type) {
2304
+ var r = typeCache.get(type);
2305
+ if (!r) {
2306
+ r = new ValueListInfo(type);
2307
+ typeCache.set(type, r);
2308
+ }
2309
+ return r;
2310
+ };
2311
+ ValueListInfo.prototype.loadFromDecoratorOptions = function () {
2312
+ var e_30, _a, _b;
2313
+ if (this.loadedFromOptions)
2314
+ return;
2315
+ var options = Reflect.getMetadata(exports.storableMember, this.valueListType);
2316
+ if (options) {
2317
+ this.loadedFromOptions = true;
2288
2318
  try {
2289
2319
  for (var options_1 = tslib_1.__values(options), options_1_1 = options_1.next(); !options_1_1.done; options_1_1 = options_1.next()) {
2290
2320
  var op = options_1_1.value;
2291
- if (op === null || op === void 0 ? void 0 : op.getValues)
2292
- this.values = op.getValues();
2321
+ if (op === null || op === void 0 ? void 0 : op.getValues) {
2322
+ (_b = this.values).splice.apply(_b, tslib_1.__spread([0, this.values.length], op.getValues()));
2323
+ this.values.forEach(function (s) {
2324
+ if (s.caption === undefined && s.id !== undefined)
2325
+ s.caption = column_1.makeTitle(s.id);
2326
+ });
2327
+ }
2293
2328
  }
2294
2329
  }
2295
2330
  catch (e_30_1) { e_30 = { error: e_30_1 }; }
@@ -2299,18 +2334,16 @@ var ValueListInfo = /** @class */ (function () {
2299
2334
  }
2300
2335
  finally { if (e_30) throw e_30.error; }
2301
2336
  }
2302
- }
2303
- ValueListInfo.get = function (type) {
2304
- var r = typeCache.get(type);
2305
- if (!r)
2306
- r = new ValueListInfo(type);
2307
- typeCache.set(type, r);
2308
- return r;
2337
+ if (this.values.find(function (s) { return s.id === undefined; }))
2338
+ throw new Error("Type " + this.valueListType + " has values without an id");
2339
+ }
2309
2340
  };
2310
2341
  ValueListInfo.prototype.getValues = function () {
2342
+ this.loadFromDecoratorOptions();
2311
2343
  return this.values;
2312
2344
  };
2313
2345
  ValueListInfo.prototype.byId = function (key) {
2346
+ this.loadFromDecoratorOptions();
2314
2347
  if (this.isNumeric)
2315
2348
  key = +key;
2316
2349
  return this.byIdMap.get(key);
@@ -111,6 +111,42 @@ db_tests_setup_1.testAll("filter works on all db or", function (_a) {
111
111
  });
112
112
  });
113
113
  }, false);
114
+ db_tests_setup_1.testAll("filter works on all db or_1", function (_a) {
115
+ var createEntity = _a.createEntity;
116
+ return tslib_1.__awaiter(void 0, void 0, void 0, function () {
117
+ var s, _b;
118
+ return tslib_1.__generator(this, function (_c) {
119
+ switch (_c.label) {
120
+ case 0: return [4 /*yield*/, entityWithValidations_1.entityWithValidations.create4RowsInDp(createEntity)];
121
+ case 1:
122
+ s = _c.sent();
123
+ _b = expect;
124
+ return [4 /*yield*/, s.find({ where: { $or: [{}, {}] } })];
125
+ case 2:
126
+ _b.apply(void 0, [(_c.sent()).length]).toBe(4);
127
+ return [2 /*return*/];
128
+ }
129
+ });
130
+ });
131
+ }, false);
132
+ db_tests_setup_1.testAll("filter works on all db or_2", function (_a) {
133
+ var createEntity = _a.createEntity;
134
+ return tslib_1.__awaiter(void 0, void 0, void 0, function () {
135
+ var s, _b;
136
+ return tslib_1.__generator(this, function (_c) {
137
+ switch (_c.label) {
138
+ case 0: return [4 /*yield*/, entityWithValidations_1.entityWithValidations.create4RowsInDp(createEntity)];
139
+ case 1:
140
+ s = _c.sent();
141
+ _b = expect;
142
+ return [4 /*yield*/, s.find({ where: { $or: [{}, { myId: 3 }] } })];
143
+ case 2:
144
+ _b.apply(void 0, [(_c.sent()).length]).toBe(4);
145
+ return [2 /*return*/];
146
+ }
147
+ });
148
+ });
149
+ }, false);
114
150
  db_tests_setup_1.testAll("entity with different id column still works well", function (_a) {
115
151
  var createEntity = _a.createEntity;
116
152
  return tslib_1.__awaiter(void 0, void 0, void 0, function () {
@@ -290,11 +326,11 @@ var testDateWithNull = /** @class */ (function (_super) {
290
326
  return _this;
291
327
  }
292
328
  tslib_1.__decorate([
293
- remult3_1.Fields.Integer(),
329
+ remult3_1.Fields.integer(),
294
330
  tslib_1.__metadata("design:type", Number)
295
331
  ], testDateWithNull.prototype, "id", void 0);
296
332
  tslib_1.__decorate([
297
- remult3_1.Fields.DateOnly({ allowNull: true }),
333
+ remult3_1.Fields.dateOnly({ allowNull: true }),
298
334
  tslib_1.__metadata("design:type", Date)
299
335
  ], testDateWithNull.prototype, "d", void 0);
300
336
  testDateWithNull = tslib_1.__decorate([
@@ -778,7 +814,7 @@ db_tests_setup_1.testAll("Test unique Validation,", function (_a) {
778
814
  return class_1;
779
815
  }(remult_3_entities_1.Categories));
780
816
  remult3_1.Entity('categories')(type);
781
- remult3_1.Fields.String({
817
+ remult3_1.Fields.string({
782
818
  validate: function (en, col) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
783
819
  return tslib_1.__generator(this, function (_a) {
784
820
  switch (_a.label) {
@@ -840,7 +876,7 @@ db_tests_setup_1.testAll("Test unique Validation 2", function (_a) {
840
876
  return class_2;
841
877
  }(remult_3_entities_1.Categories));
842
878
  remult3_1.Entity('sdfgds')(type);
843
- remult3_1.Fields.String({
879
+ remult3_1.Fields.string({
844
880
  validate: validators_1.Validators.unique
845
881
  })(type.prototype, "a");
846
882
  return [4 /*yield*/, createEntity(type)];
@@ -879,11 +915,11 @@ var testNumbers = /** @class */ (function (_super) {
879
915
  return _super !== null && _super.apply(this, arguments) || this;
880
916
  }
881
917
  tslib_1.__decorate([
882
- remult3_1.Fields.Integer(),
918
+ remult3_1.Fields.integer(),
883
919
  tslib_1.__metadata("design:type", Number)
884
920
  ], testNumbers.prototype, "id", void 0);
885
921
  tslib_1.__decorate([
886
- remult3_1.Fields.Number(),
922
+ remult3_1.Fields.number(),
887
923
  tslib_1.__metadata("design:type", Number)
888
924
  ], testNumbers.prototype, "a", void 0);
889
925
  testNumbers = tslib_1.__decorate([
@@ -1123,8 +1159,8 @@ db_tests_setup_1.testAll("saves correctly to db", function (_a) {
1123
1159
  return class_3;
1124
1160
  }(remult3_1.EntityBase));
1125
1161
  remult3_1.Entity('asdf', { allowApiCrud: true })(type);
1126
- remult3_1.Fields.Number()(type.prototype, 'id');
1127
- remult3_1.Fields.Boolean()(type.prototype, "ok");
1162
+ remult3_1.Fields.number()(type.prototype, 'id');
1163
+ remult3_1.Fields.boolean()(type.prototype, "ok");
1128
1164
  return [4 /*yield*/, createEntity(type)];
1129
1165
  case 1:
1130
1166
  r = (_b.sent()).create();
@@ -1150,11 +1186,11 @@ var autoIncrement = /** @class */ (function (_super) {
1150
1186
  return _super !== null && _super.apply(this, arguments) || this;
1151
1187
  }
1152
1188
  tslib_1.__decorate([
1153
- remult3_1.Fields.AutoIncrement(),
1189
+ remult3_1.Fields.autoIncrement(),
1154
1190
  tslib_1.__metadata("design:type", Number)
1155
1191
  ], autoIncrement.prototype, "id", void 0);
1156
1192
  tslib_1.__decorate([
1157
- remult3_1.Fields.Integer(),
1193
+ remult3_1.Fields.integer(),
1158
1194
  tslib_1.__metadata("design:type", Number)
1159
1195
  ], autoIncrement.prototype, "stam", void 0);
1160
1196
  autoIncrement = tslib_1.__decorate([
@@ -1270,19 +1306,19 @@ var testFilter = /** @class */ (function () {
1270
1306
  }]
1271
1307
  }); });
1272
1308
  tslib_1.__decorate([
1273
- remult3_1.Fields.Integer(),
1309
+ remult3_1.Fields.integer(),
1274
1310
  tslib_1.__metadata("design:type", Number)
1275
1311
  ], testFilter.prototype, "id", void 0);
1276
1312
  tslib_1.__decorate([
1277
- remult3_1.Fields.String(),
1313
+ remult3_1.Fields.string(),
1278
1314
  tslib_1.__metadata("design:type", String)
1279
1315
  ], testFilter.prototype, "a", void 0);
1280
1316
  tslib_1.__decorate([
1281
- remult3_1.Fields.String(),
1317
+ remult3_1.Fields.string(),
1282
1318
  tslib_1.__metadata("design:type", String)
1283
1319
  ], testFilter.prototype, "b", void 0);
1284
1320
  tslib_1.__decorate([
1285
- remult3_1.Fields.String(),
1321
+ remult3_1.Fields.string(),
1286
1322
  tslib_1.__metadata("design:type", String)
1287
1323
  ], testFilter.prototype, "c", void 0);
1288
1324
  testFilter = tslib_1.__decorate([
@@ -1298,11 +1334,11 @@ var testStringWithNull = /** @class */ (function (_super) {
1298
1334
  return _this;
1299
1335
  }
1300
1336
  tslib_1.__decorate([
1301
- remult3_1.Fields.Integer(),
1337
+ remult3_1.Fields.integer(),
1302
1338
  tslib_1.__metadata("design:type", Number)
1303
1339
  ], testStringWithNull.prototype, "id", void 0);
1304
1340
  tslib_1.__decorate([
1305
- remult3_1.Fields.String({ allowNull: true }),
1341
+ remult3_1.Fields.string({ allowNull: true }),
1306
1342
  tslib_1.__metadata("design:type", String)
1307
1343
  ], testStringWithNull.prototype, "d", void 0);
1308
1344
  testStringWithNull = tslib_1.__decorate([
@@ -1319,11 +1355,11 @@ var stam = /** @class */ (function (_super) {
1319
1355
  return _this;
1320
1356
  }
1321
1357
  tslib_1.__decorate([
1322
- remult3_1.Fields.Integer(),
1358
+ remult3_1.Fields.integer(),
1323
1359
  tslib_1.__metadata("design:type", Number)
1324
1360
  ], stam.prototype, "id", void 0);
1325
1361
  tslib_1.__decorate([
1326
- remult3_1.Fields.String({ maxLength: 1500 }),
1362
+ remult3_1.Fields.string({ maxLength: 1500 }),
1327
1363
  tslib_1.__metadata("design:type", String)
1328
1364
  ], stam.prototype, "title", void 0);
1329
1365
  stam = tslib_1.__decorate([
@@ -1340,11 +1376,11 @@ var p = /** @class */ (function (_super) {
1340
1376
  return _this;
1341
1377
  }
1342
1378
  tslib_1.__decorate([
1343
- remult3_1.Fields.Integer(),
1379
+ remult3_1.Fields.integer(),
1344
1380
  tslib_1.__metadata("design:type", Number)
1345
1381
  ], p.prototype, "id", void 0);
1346
1382
  tslib_1.__decorate([
1347
- remult3_1.Fields.String(),
1383
+ remult3_1.Fields.string(),
1348
1384
  tslib_1.__metadata("design:type", String)
1349
1385
  ], p.prototype, "name", void 0);
1350
1386
  tslib_1.__decorate([
@@ -53,11 +53,11 @@ var entityWithValidations = /** @class */ (function (_super) {
53
53
  var entityWithValidations_1;
54
54
  entityWithValidations.savingRowCount = 0;
55
55
  tslib_1.__decorate([
56
- remult3_1.Fields.Integer(),
56
+ remult3_1.Fields.integer(),
57
57
  tslib_1.__metadata("design:type", Number)
58
58
  ], entityWithValidations.prototype, "myId", void 0);
59
59
  tslib_1.__decorate([
60
- remult3_1.Fields.String(),
60
+ remult3_1.Fields.string(),
61
61
  tslib_1.__metadata("design:type", String)
62
62
  ], entityWithValidations.prototype, "name", void 0);
63
63
  entityWithValidations = entityWithValidations_1 = tslib_1.__decorate([
@@ -19,8 +19,8 @@ describe("custom id column", function () {
19
19
  return class_1;
20
20
  }(remult3_1.EntityBase));
21
21
  remult3_1.BuildEntity(type, 'custom', {
22
- a: remult3_1.Fields.Number(),
23
- b: remult3_1.Fields.Number()
22
+ a: remult3_1.Fields.number(),
23
+ b: remult3_1.Fields.number()
24
24
  }, { allowApiCrud: true });
25
25
  return [4 /*yield*/, createEntity(type)];
26
26
  case 1:
@@ -58,8 +58,8 @@ describe("custom id column", function () {
58
58
  return class_2;
59
59
  }(remult3_1.EntityBase));
60
60
  remult3_1.Entity('custom2', { allowApiCrud: true })(type);
61
- remult3_1.Fields.Number()(type.prototype, 'a');
62
- remult3_1.Fields.Number()(type.prototype, 'id');
61
+ remult3_1.Fields.number()(type.prototype, 'a');
62
+ remult3_1.Fields.number()(type.prototype, 'id');
63
63
  return [4 /*yield*/, createEntity(type)];
64
64
  case 1:
65
65
  c = _c.sent();
@@ -66,7 +66,7 @@ var testGroups = /** @class */ (function (_super) {
66
66
  return _this;
67
67
  }
68
68
  tslib_1.__decorate([
69
- remult3_1.Fields.Integer(),
69
+ remult3_1.Fields.integer(),
70
70
  tslib_1.__metadata("design:type", Number)
71
71
  ], testGroups.prototype, "id", void 0);
72
72
  tslib_1.__decorate([
@@ -11,7 +11,7 @@ var testNull = /** @class */ (function (_super) {
11
11
  return _this;
12
12
  }
13
13
  tslib_1.__decorate([
14
- remult3_1.Fields.Integer(),
14
+ remult3_1.Fields.integer(),
15
15
  tslib_1.__metadata("design:type", Number)
16
16
  ], testNull.prototype, "id", void 0);
17
17
  tslib_1.__decorate([
package/src/tests/c.js CHANGED
@@ -12,11 +12,11 @@ var c = /** @class */ (function (_super) {
12
12
  return _this;
13
13
  }
14
14
  tslib_1.__decorate([
15
- remult3_1.Fields.Integer(),
15
+ remult3_1.Fields.integer(),
16
16
  tslib_1.__metadata("design:type", Number)
17
17
  ], c.prototype, "id", void 0);
18
18
  tslib_1.__decorate([
19
- remult3_1.Fields.String(),
19
+ remult3_1.Fields.string(),
20
20
  tslib_1.__metadata("design:type", String)
21
21
  ], c.prototype, "name", void 0);
22
22
  c = tslib_1.__decorate([
package/src/tests/d.js CHANGED
@@ -20,11 +20,11 @@ var d = /** @class */ (function (_super) {
20
20
  };
21
21
  d.count = 0;
22
22
  tslib_1.__decorate([
23
- remult3_1.Fields.Integer(),
23
+ remult3_1.Fields.integer(),
24
24
  tslib_1.__metadata("design:type", Number)
25
25
  ], d.prototype, "id", void 0);
26
26
  tslib_1.__decorate([
27
- remult3_1.Fields.Integer(),
27
+ remult3_1.Fields.integer(),
28
28
  tslib_1.__metadata("design:type", Number)
29
29
  ], d.prototype, "b", void 0);
30
30
  tslib_1.__decorate([
@@ -21,11 +21,11 @@ var dWithPrefilter = /** @class */ (function (_super) {
21
21
  var dWithPrefilter_1;
22
22
  dWithPrefilter.count = 0;
23
23
  tslib_1.__decorate([
24
- remult3_1.Fields.Integer(),
24
+ remult3_1.Fields.integer(),
25
25
  tslib_1.__metadata("design:type", Number)
26
26
  ], dWithPrefilter.prototype, "id", void 0);
27
27
  tslib_1.__decorate([
28
- remult3_1.Fields.Integer(),
28
+ remult3_1.Fields.integer(),
29
29
  tslib_1.__metadata("design:type", Number)
30
30
  ], dWithPrefilter.prototype, "b", void 0);
31
31
  tslib_1.__decorate([
@@ -46,7 +46,7 @@ var entityForCustomFilter = /** @class */ (function (_super) {
46
46
  entityForCustomFilter.testNumericValue = filter_interfaces_1.Filter.createCustom(function (r, val) { return ({ id: val }); });
47
47
  entityForCustomFilter.testObjectValue = filter_interfaces_1.Filter.createCustom(function (r, val) { return ({ id: val.val }); });
48
48
  tslib_1.__decorate([
49
- remult3_1.Fields.Integer(),
49
+ remult3_1.Fields.integer(),
50
50
  tslib_1.__metadata("design:type", Number)
51
51
  ], entityForCustomFilter.prototype, "id", void 0);
52
52
  entityForCustomFilter = entityForCustomFilter_1 = tslib_1.__decorate([
@@ -9,11 +9,11 @@ var entityWithValidationsOnColumn = /** @class */ (function (_super) {
9
9
  return _super !== null && _super.apply(this, arguments) || this;
10
10
  }
11
11
  tslib_1.__decorate([
12
- remult3_1.Fields.Integer(),
12
+ remult3_1.Fields.integer(),
13
13
  tslib_1.__metadata("design:type", Number)
14
14
  ], entityWithValidationsOnColumn.prototype, "myId", void 0);
15
15
  tslib_1.__decorate([
16
- remult3_1.Fields.String({
16
+ remult3_1.Fields.string({
17
17
  validate: function (t, c) {
18
18
  if (!t.name || t.name.length < 3)
19
19
  c.error = 'invalid on column';
package/src/tests/h.js CHANGED
@@ -11,7 +11,7 @@ var h = /** @class */ (function (_super) {
11
11
  h_1 = h;
12
12
  var h_1;
13
13
  tslib_1.__decorate([
14
- remult3_1.Fields.String(),
14
+ remult3_1.Fields.string(),
15
15
  tslib_1.__metadata("design:type", String)
16
16
  ], h.prototype, "id", void 0);
17
17
  tslib_1.__decorate([
@@ -19,7 +19,7 @@ var h = /** @class */ (function (_super) {
19
19
  tslib_1.__metadata("design:type", h)
20
20
  ], h.prototype, "refH", void 0);
21
21
  tslib_1.__decorate([
22
- remult3_1.Fields.String(),
22
+ remult3_1.Fields.string(),
23
23
  tslib_1.__metadata("design:type", String)
24
24
  ], h.prototype, "refHId", void 0);
25
25
  h = h_1 = tslib_1.__decorate([
@@ -8,23 +8,23 @@ var Products = /** @class */ (function () {
8
8
  function Products() {
9
9
  }
10
10
  tslib_1.__decorate([
11
- remult3_1.Fields.Integer(),
11
+ remult3_1.Fields.integer(),
12
12
  tslib_1.__metadata("design:type", Number)
13
13
  ], Products.prototype, "id", void 0);
14
14
  tslib_1.__decorate([
15
- remult3_1.Fields.String(),
15
+ remult3_1.Fields.string(),
16
16
  tslib_1.__metadata("design:type", String)
17
17
  ], Products.prototype, "name", void 0);
18
18
  tslib_1.__decorate([
19
- remult3_1.Fields.Number(),
19
+ remult3_1.Fields.number(),
20
20
  tslib_1.__metadata("design:type", Number)
21
21
  ], Products.prototype, "price", void 0);
22
22
  tslib_1.__decorate([
23
- remult3_1.Fields.Boolean(),
23
+ remult3_1.Fields.boolean(),
24
24
  tslib_1.__metadata("design:type", Boolean)
25
25
  ], Products.prototype, "archived", void 0);
26
26
  tslib_1.__decorate([
27
- remult3_1.Fields.Date(),
27
+ remult3_1.Fields.date(),
28
28
  tslib_1.__metadata("design:type", Date)
29
29
  ], Products.prototype, "availableFrom", void 0);
30
30
  Products = tslib_1.__decorate([
@@ -42,27 +42,27 @@ var Categories = /** @class */ (function (_super) {
42
42
  return _this;
43
43
  }
44
44
  tslib_1.__decorate([
45
- remult3_1.Fields.Number({
45
+ remult3_1.Fields.number({
46
46
  dbName: 'CategoryID'
47
47
  }),
48
48
  tslib_1.__metadata("design:type", Number)
49
49
  ], Categories.prototype, "id", void 0);
50
50
  tslib_1.__decorate([
51
- remult3_1.Fields.String({ allowNull: true }),
51
+ remult3_1.Fields.string({ allowNull: true }),
52
52
  tslib_1.__metadata("design:type", String)
53
53
  ], Categories.prototype, "categoryName", void 0);
54
54
  tslib_1.__decorate([
55
- remult3_1.Fields.String(),
55
+ remult3_1.Fields.string(),
56
56
  tslib_1.__metadata("design:type", String)
57
57
  ], Categories.prototype, "description", void 0);
58
58
  tslib_1.__decorate([
59
- remult3_1.Fields.Number({
59
+ remult3_1.Fields.number({
60
60
  serverExpression: function (c) { return c.categoryName ? c.categoryName.length : undefined; }
61
61
  }),
62
62
  tslib_1.__metadata("design:type", Number)
63
63
  ], Categories.prototype, "categoryNameLength", void 0);
64
64
  tslib_1.__decorate([
65
- remult3_1.Fields.Number({
65
+ remult3_1.Fields.number({
66
66
  serverExpression: function (c) { return Promise.resolve(c.categoryName ? c.categoryName.length : undefined); }
67
67
  }),
68
68
  tslib_1.__metadata("design:type", Number)
@@ -11,15 +11,15 @@ var tasks = /** @class */ (function (_super) {
11
11
  return _this;
12
12
  }
13
13
  tslib_1.__decorate([
14
- remult3_1.Fields.Integer(),
14
+ remult3_1.Fields.integer(),
15
15
  tslib_1.__metadata("design:type", Number)
16
16
  ], tasks.prototype, "id", void 0);
17
17
  tslib_1.__decorate([
18
- remult3_1.Fields.String(),
18
+ remult3_1.Fields.string(),
19
19
  tslib_1.__metadata("design:type", String)
20
20
  ], tasks.prototype, "name", void 0);
21
21
  tslib_1.__decorate([
22
- remult3_1.Fields.Boolean(),
22
+ remult3_1.Fields.boolean(),
23
23
  tslib_1.__metadata("design:type", Boolean)
24
24
  ], tasks.prototype, "completed", void 0);
25
25
  tasks = tslib_1.__decorate([