remult 0.12.9 → 0.13.3

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 (39) hide show
  1. package/graphql.js +2 -2
  2. package/index.d.ts +2 -1
  3. package/index.js +6 -5
  4. package/package.json +1 -1
  5. package/postgres/postgres-data-provider.js +3 -2
  6. package/postgres/postgresColumnSyntax.js +1 -1
  7. package/remult-knex/index.js +6 -5
  8. package/remult-mongo.js +1 -1
  9. package/server/expressBridge.js +9 -9
  10. package/src/backend-tests/backend-database-test-setup.backend-spec.d.ts +1 -1
  11. package/src/backend-tests/backend-database-test-setup.backend-spec.js +1 -1
  12. package/src/context.js +1 -1
  13. package/src/data-api.js +73 -52
  14. package/src/data-providers/array-entity-data-provider.js +8 -7
  15. package/src/data-providers/web-sql-data-provider.js +12 -6
  16. package/src/entity.d.ts +0 -1
  17. package/src/filter/filter-interfaces.d.ts +2 -2
  18. package/src/filter/filter-interfaces.js +5 -2
  19. package/src/id-entity.js +1 -5
  20. package/src/remult3/RepositoryImplementation.d.ts +53 -16
  21. package/src/remult3/RepositoryImplementation.js +209 -73
  22. package/src/remult3/remult3.d.ts +3 -3
  23. package/src/shared-tests/db-tests.db-tests.js +43 -24
  24. package/src/shared-tests/entityWithValidations.js +2 -2
  25. package/src/shared-tests/test-custom-id-column.spec.js +4 -4
  26. package/src/shared-tests/test-special-value.spec.js +2 -2
  27. package/src/shared-tests/test-update-with-null.spec.js +2 -2
  28. package/src/tests/c.js +2 -2
  29. package/src/tests/d.js +2 -2
  30. package/src/tests/dWithPrefilter.js +2 -2
  31. package/src/tests/entityForCustomFilter.js +1 -1
  32. package/src/tests/entityWithValidationsOnColumn.js +2 -2
  33. package/src/tests/h.js +6 -4
  34. package/src/tests/remult-3-entities.js +11 -11
  35. package/src/tests/tasks.js +3 -3
  36. package/src/validators.d.ts +5 -3
  37. package/src/validators.js +9 -7
  38. package/valueConverters.d.ts +11 -24
  39. package/valueConverters.js +148 -210
@@ -1,7 +1,7 @@
1
- import { FieldMetadata, FieldOptions, ValueListItem } from "../column-interfaces";
1
+ import { FieldMetadata, FieldOptions, ValueConverter, ValueListItem } from "../column-interfaces";
2
2
  import { EntityOptions } from "../entity";
3
3
  import { LookupColumn } from '../column';
4
- import { EntityMetadata, FieldRef, Fields, EntityFilter, FindOptions, Repository, EntityRef, QueryOptions, QueryResult, EntityOrderBy, FieldsMetadata, IdMetadata, FindFirstOptionsBase, FindFirstOptions, OmitEB, Subscribable, ControllerRef } from "./remult3";
4
+ import { EntityMetadata, FieldRef, FieldsRef, EntityFilter, FindOptions, Repository, EntityRef, QueryOptions, QueryResult, EntityOrderBy, FieldsMetadata, IdMetadata, FindFirstOptionsBase, FindFirstOptions, OmitEB, Subscribable, ControllerRef } from "./remult3";
5
5
  import { ClassType } from "../../classType";
6
6
  import { Remult, Unobserve } from "../context";
7
7
  import { entityEventListener } from "../__EntityValueProvider";
@@ -78,7 +78,7 @@ declare abstract class rowHelperBase<T> {
78
78
  [key: string]: string;
79
79
  };
80
80
  protected __assertValidity(): void;
81
- abstract get fields(): Fields<T>;
81
+ abstract get fields(): FieldsRef<T>;
82
82
  catchSaveErrors(err: any): any;
83
83
  __clearErrorsAndReportChanged(): void;
84
84
  _reportChangedToEntityAndFields(): void;
@@ -108,7 +108,7 @@ export declare class rowHelperImplementation<T> extends rowHelperBase<T> impleme
108
108
  undoChanges(): void;
109
109
  reload(): Promise<T>;
110
110
  private _columns;
111
- get fields(): Fields<T>;
111
+ get fields(): FieldsRef<T>;
112
112
  private _saving;
113
113
  save(): Promise<T>;
114
114
  private getIdFilter;
@@ -121,7 +121,7 @@ export declare class rowHelperImplementation<T> extends rowHelperBase<T> impleme
121
121
  wasChanged(): boolean;
122
122
  __performColumnAndEntityValidations(): Promise<void>;
123
123
  }
124
- export declare function getFields<fieldsContainerType>(container: fieldsContainerType, remult?: Remult): Fields<fieldsContainerType>;
124
+ export declare function getFields<fieldsContainerType>(container: fieldsContainerType, remult?: Remult): FieldsRef<fieldsContainerType>;
125
125
  export declare function getControllerRef<fieldsContainerType>(container: fieldsContainerType, remult?: Remult): ControllerRef<fieldsContainerType>;
126
126
  export declare class controllerRefImpl<T = any> extends rowHelperBase<T> implements ControllerRef<T> {
127
127
  constructor(columnsInfo: FieldOptions[], instance: any, remult: Remult);
@@ -130,7 +130,7 @@ export declare class controllerRefImpl<T = any> extends rowHelperBase<T> impleme
130
130
  [key: string]: string;
131
131
  };
132
132
  originalValues: any;
133
- fields: Fields<T>;
133
+ fields: FieldsRef<T>;
134
134
  }
135
135
  export declare class FieldRefImplementation<entityType, valueType> implements FieldRef<entityType, valueType> {
136
136
  private settings;
@@ -176,7 +176,7 @@ export declare class columnDefsImpl implements FieldMetadata {
176
176
  options: FieldOptions<any, any>;
177
177
  target: ClassType<any>;
178
178
  readonly: boolean;
179
- valueConverter: import("../column-interfaces").ValueConverter<any>;
179
+ valueConverter: ValueConverter<any>;
180
180
  allowNull: boolean;
181
181
  caption: string;
182
182
  get dbName(): any;
@@ -201,18 +201,55 @@ declare class EntityFullInfo<T> implements EntityMetadata<T> {
201
201
  dbNamePromise: Promise<string>;
202
202
  getDbName(): Promise<string>;
203
203
  idMetadata: IdMetadata<T>;
204
- dbAutoIncrementId: boolean;
205
204
  fields: FieldsMetadata<T>;
206
205
  dbName: string;
207
206
  caption: string;
208
207
  }
209
208
  export declare function FieldType<valueType = any>(...options: (FieldOptions<any, valueType> | ((options: FieldOptions<any, valueType>, remult: Remult) => void))[]): (target: any) => any;
210
- export declare function JsonField<entityType = any, valueType = any>(...options: (FieldOptions<entityType, valueType> | ((options: FieldOptions<entityType, valueType>, remult: Remult) => void))[]): (target: any, key: any, c?: any) => void;
211
- export declare function DateOnlyField<entityType = any>(...options: (FieldOptions<entityType, Date> | ((options: FieldOptions<entityType, Date>, remult: Remult) => void))[]): (target: any, key: any, c?: any) => void;
212
- export declare function IntegerField<entityType = any>(...options: (FieldOptions<entityType, Number> | ((options: FieldOptions<entityType, Number>, remult: Remult) => void))[]): (target: any, key: any, c?: any) => void;
213
- export declare function ValueListFieldType<entityType = any, valueType extends ValueListItem = any>(...options: (FieldOptions<entityType, valueType> | ((options: FieldOptions<entityType, valueType>, remult: Remult) => void))[]): (type: ClassType<valueType>) => any;
214
- export declare function UuidField<entityType = any, valueType = any>(...options: (FieldOptions<entityType, valueType> | ((options: FieldOptions<entityType, valueType>, remult: Remult) => void))[]): (target: any, key: any, c?: any) => void;
215
- export declare function Field<entityType = any, valueType = any>(...options: (FieldOptions<entityType, valueType> | ((options: FieldOptions<entityType, valueType>, remult: Remult) => void))[]): (target: any, key: any, c?: any) => void;
209
+ export declare const Fields1: {
210
+ String: () => (a: any) => void;
211
+ };
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;
222
+ }
223
+ export declare function isAutoIncrement(f: FieldMetadata): boolean;
224
+ export interface StringFieldOptions<entityType = any> extends FieldOptions<entityType, string> {
225
+ maxLength?: number;
226
+ }
227
+ export declare function ValueListFieldType<entityType = any, valueType extends ValueListItem = any>(...options: (ValueListFieldOptions<entityType, valueType> | ((options: FieldOptions<entityType, valueType>, remult: Remult) => void))[]): (type: ClassType<valueType>) => any;
228
+ export interface ValueListFieldOptions<entityType, valueType> extends FieldOptions<entityType, valueType> {
229
+ getValues?: () => valueType[];
230
+ }
231
+ export declare class ValueListInfo<T extends ValueListItem> implements ValueConverter<T> {
232
+ private valueListType;
233
+ static get<T extends ValueListItem>(type: ClassType<T>): ValueListInfo<T>;
234
+ private byIdMap;
235
+ private values;
236
+ isNumeric: boolean;
237
+ private constructor();
238
+ getValues(): T[];
239
+ byId(key: any): T;
240
+ fromJson(val: any): T;
241
+ toJson(val: T): any;
242
+ fromDb(val: any): T;
243
+ toDb(val: T): any;
244
+ toInput(val: T, inputType: string): string;
245
+ fromInput(val: string, inputType: string): T;
246
+ displayValue?(val: T): string;
247
+ fieldTypeInDb?: string;
248
+ inputType?: string;
249
+ }
250
+ export declare function getValueList<T>(type: ClassType<T>): T[];
251
+ export declare function Field<entityType = any, valueType = any>(valueType: () => ClassType<valueType>, ...options: (FieldOptions<entityType, valueType> | ((options: FieldOptions<entityType, valueType>, remult: Remult) => void))[]): (target: any, key: any, c?: any) => void;
252
+ export declare const storableMember: unique symbol;
216
253
  export declare function decorateColumnSettings<valueType>(settings: FieldOptions<any, valueType>, remult: Remult): FieldOptions<any, valueType>;
217
254
  interface columnInfo {
218
255
  key: string;
@@ -229,12 +266,12 @@ export declare class EntityBase {
229
266
  assign(values: Partial<Omit<this, keyof EntityBase>>): this;
230
267
  delete(): Promise<void>;
231
268
  isNew(): boolean;
232
- get $(): Fields<this>;
269
+ get $(): FieldsRef<this>;
233
270
  }
234
271
  export declare class ControllerBase {
235
272
  protected remult: Remult;
236
273
  constructor(remult: Remult);
237
- get $(): Fields<this>;
274
+ get $(): FieldsRef<this>;
238
275
  get _(): ControllerRef<this>;
239
276
  }
240
277
  declare class SubscribableImp implements Subscribable {
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ControllerBase = exports.EntityBase = exports.Entity = exports.BuildEntity = exports.decorateColumnSettings = exports.Field = exports.UuidField = exports.ValueListFieldType = exports.IntegerField = exports.DateOnlyField = exports.JsonField = 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.ControllerBase = exports.EntityBase = exports.Entity = exports.BuildEntity = exports.decorateColumnSettings = exports.storableMember = exports.Field = exports.getValueList = exports.ValueListInfo = exports.ValueListFieldType = exports.isAutoIncrement = exports.Fields = exports.Fields1 = 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");
@@ -1248,7 +1248,7 @@ var rowHelperImplementation = /** @class */ (function (_super) {
1248
1248
  try {
1249
1249
  for (_d = tslib_1.__values(this.metadata.fields), _e = _d.next(); !_e.done; _e = _d.next()) {
1250
1250
  field = _e.value;
1251
- if (field.dbReadOnly || field == this.metadata.idMetadata.field && this.metadata.options.dbAutoIncrementId) {
1251
+ if (field.dbReadOnly) {
1252
1252
  d[field.key] = undefined;
1253
1253
  ignoreKeys.push(field.key);
1254
1254
  f = this.fields.find(field);
@@ -2085,7 +2085,6 @@ var EntityFullInfo = /** @class */ (function () {
2085
2085
  finally { if (e_29) throw e_29.error; }
2086
2086
  }
2087
2087
  this.fields = r;
2088
- this.dbAutoIncrementId = entityInfo.dbAutoIncrementId;
2089
2088
  this.caption = buildCaption(entityInfo.caption, this.key, remult);
2090
2089
  if (entityInfo.id) {
2091
2090
  this.idMetadata.field = entityInfo.id(this.fields);
@@ -2152,46 +2151,102 @@ function FieldType() {
2152
2151
  options = [];
2153
2152
  }
2154
2153
  options.splice(0, 0, { valueType: target });
2155
- Reflect.defineMetadata(storableMember, options, target);
2154
+ Reflect.defineMetadata(exports.storableMember, options, target);
2156
2155
  return target;
2157
2156
  };
2158
2157
  }
2159
2158
  exports.FieldType = FieldType;
2160
- function JsonField() {
2161
- var options = [];
2162
- for (var _i = 0; _i < arguments.length; _i++) {
2163
- options[_i] = arguments[_i];
2164
- }
2165
- return Field.apply(void 0, tslib_1.__spread([{
2166
- valueConverter: {
2167
- toDb: function (x) { return x; },
2168
- fromDb: function (x) { return x; },
2169
- fieldTypeInDb: 'json'
2170
- }
2171
- }], options));
2172
- }
2173
- exports.JsonField = JsonField;
2174
- function DateOnlyField() {
2175
- var options = [];
2176
- for (var _i = 0; _i < arguments.length; _i++) {
2177
- options[_i] = arguments[_i];
2159
+ exports.Fields1 = {
2160
+ String: function () {
2161
+ return function (a) {
2162
+ };
2178
2163
  }
2179
- return Field.apply(void 0, tslib_1.__spread([{
2180
- valueConverter: valueConverters_1.DateOnlyValueConverter
2181
- }], options));
2182
- }
2183
- exports.DateOnlyField = DateOnlyField;
2184
- function IntegerField() {
2185
- var options = [];
2186
- for (var _i = 0; _i < arguments.length; _i++) {
2187
- options[_i] = arguments[_i];
2164
+ };
2165
+ var Fields = /** @class */ (function () {
2166
+ function Fields() {
2188
2167
  }
2189
- return Field.apply(void 0, tslib_1.__spread([{
2190
- valueType: Number,
2191
- valueConverter: valueConverters_1.IntegerValueConverter
2192
- }], options));
2168
+ Fields.Object = function () {
2169
+ var options = [];
2170
+ for (var _i = 0; _i < arguments.length; _i++) {
2171
+ options[_i] = arguments[_i];
2172
+ }
2173
+ return Field.apply(void 0, tslib_1.__spread([undefined], options));
2174
+ };
2175
+ Fields.DateOnly = function () {
2176
+ var options = [];
2177
+ for (var _i = 0; _i < arguments.length; _i++) {
2178
+ options[_i] = arguments[_i];
2179
+ }
2180
+ return Field.apply(void 0, tslib_1.__spread([function () { return Date; }, {
2181
+ valueConverter: valueConverters_1.ValueConverters.DateOnly
2182
+ }], options));
2183
+ };
2184
+ Fields.Date = function () {
2185
+ var options = [];
2186
+ for (var _i = 0; _i < arguments.length; _i++) {
2187
+ options[_i] = arguments[_i];
2188
+ }
2189
+ return Field.apply(void 0, tslib_1.__spread([function () { return Date; }], options));
2190
+ };
2191
+ Fields.Integer = function () {
2192
+ var options = [];
2193
+ for (var _i = 0; _i < arguments.length; _i++) {
2194
+ options[_i] = arguments[_i];
2195
+ }
2196
+ return Field.apply(void 0, tslib_1.__spread([function () { return Number; }, {
2197
+ valueConverter: valueConverters_1.ValueConverters.Integer
2198
+ }], options));
2199
+ };
2200
+ Fields.AutoIncrement = function () {
2201
+ var options = [];
2202
+ for (var _i = 0; _i < arguments.length; _i++) {
2203
+ options[_i] = arguments[_i];
2204
+ }
2205
+ return Field.apply(void 0, tslib_1.__spread([function () { return Number; }, {
2206
+ allowApiUpdate: false,
2207
+ dbReadOnly: true,
2208
+ valueConverter: tslib_1.__assign(tslib_1.__assign({}, valueConverters_1.ValueConverters.Integer), { fieldTypeInDb: 'autoincrement' })
2209
+ }], options));
2210
+ };
2211
+ Fields.Number = function () {
2212
+ var options = [];
2213
+ for (var _i = 0; _i < arguments.length; _i++) {
2214
+ options[_i] = arguments[_i];
2215
+ }
2216
+ return Field.apply(void 0, tslib_1.__spread([function () { return Number; }], options));
2217
+ };
2218
+ Fields.Uuid = function () {
2219
+ var options = [];
2220
+ for (var _i = 0; _i < arguments.length; _i++) {
2221
+ options[_i] = arguments[_i];
2222
+ }
2223
+ return Field.apply(void 0, tslib_1.__spread([function () { return String; }, {
2224
+ allowApiUpdate: false,
2225
+ defaultValue: function () { return uuid_1.v4(); }
2226
+ }], options));
2227
+ };
2228
+ Fields.String = function () {
2229
+ var options = [];
2230
+ for (var _i = 0; _i < arguments.length; _i++) {
2231
+ options[_i] = arguments[_i];
2232
+ }
2233
+ return Field.apply(void 0, tslib_1.__spread([function () { return String; }], options));
2234
+ };
2235
+ Fields.Boolean = function () {
2236
+ var options = [];
2237
+ for (var _i = 0; _i < arguments.length; _i++) {
2238
+ options[_i] = arguments[_i];
2239
+ }
2240
+ return Field.apply(void 0, tslib_1.__spread([function () { return Boolean; }], options));
2241
+ };
2242
+ return Fields;
2243
+ }());
2244
+ exports.Fields = Fields;
2245
+ function isAutoIncrement(f) {
2246
+ var _a;
2247
+ return ((_a = f.options.valueConverter) === null || _a === void 0 ? void 0 : _a.fieldTypeInDb) === 'autoincrement';
2193
2248
  }
2194
- exports.IntegerField = IntegerField;
2249
+ exports.isAutoIncrement = isAutoIncrement;
2195
2250
  function ValueListFieldType() {
2196
2251
  var options = [];
2197
2252
  for (var _i = 0; _i < arguments.length; _i++) {
@@ -2199,31 +2254,111 @@ function ValueListFieldType() {
2199
2254
  }
2200
2255
  return function (type) {
2201
2256
  return FieldType.apply(void 0, tslib_1.__spread([function (o) {
2202
- o.valueConverter = new valueConverters_1.ValueListValueConverter(type),
2257
+ o.valueConverter = ValueListInfo.get(type),
2203
2258
  o.displayValue = function (item, val) { return val.caption; };
2204
2259
  }], options))(type);
2205
2260
  };
2206
2261
  }
2207
2262
  exports.ValueListFieldType = ValueListFieldType;
2208
- function UuidField() {
2209
- var options = [];
2210
- for (var _i = 0; _i < arguments.length; _i++) {
2211
- options[_i] = arguments[_i];
2263
+ var ValueListInfo = /** @class */ (function () {
2264
+ function ValueListInfo(valueListType) {
2265
+ var e_30, _a;
2266
+ this.valueListType = valueListType;
2267
+ this.byIdMap = new Map();
2268
+ this.values = [];
2269
+ this.isNumeric = false;
2270
+ for (var member in this.valueListType) {
2271
+ var s = this.valueListType[member];
2272
+ if (s instanceof this.valueListType) {
2273
+ if (s.id === undefined)
2274
+ s.id = member;
2275
+ if (s.caption === undefined)
2276
+ s.caption = column_1.makeTitle(member);
2277
+ if (typeof s.id === 'number')
2278
+ this.isNumeric = true;
2279
+ this.byIdMap.set(s.id, s);
2280
+ this.values.push(s);
2281
+ }
2282
+ }
2283
+ if (this.isNumeric) {
2284
+ this.fieldTypeInDb = 'integer';
2285
+ }
2286
+ var options = Reflect.getMetadata(exports.storableMember, valueListType);
2287
+ if (options)
2288
+ try {
2289
+ 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
+ var op = options_1_1.value;
2291
+ if (op === null || op === void 0 ? void 0 : op.getValues)
2292
+ this.values = op.getValues();
2293
+ }
2294
+ }
2295
+ catch (e_30_1) { e_30 = { error: e_30_1 }; }
2296
+ finally {
2297
+ try {
2298
+ if (options_1_1 && !options_1_1.done && (_a = options_1.return)) _a.call(options_1);
2299
+ }
2300
+ finally { if (e_30) throw e_30.error; }
2301
+ }
2212
2302
  }
2213
- return Field.apply(void 0, tslib_1.__spread([{
2214
- allowApiUpdate: false,
2215
- defaultValue: function () { return uuid_1.v4(); }
2216
- }], options));
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;
2309
+ };
2310
+ ValueListInfo.prototype.getValues = function () {
2311
+ return this.values;
2312
+ };
2313
+ ValueListInfo.prototype.byId = function (key) {
2314
+ if (this.isNumeric)
2315
+ key = +key;
2316
+ return this.byIdMap.get(key);
2317
+ };
2318
+ ValueListInfo.prototype.fromJson = function (val) {
2319
+ return this.byId(val);
2320
+ };
2321
+ ValueListInfo.prototype.toJson = function (val) {
2322
+ if (!val)
2323
+ return undefined;
2324
+ return val.id;
2325
+ };
2326
+ ValueListInfo.prototype.fromDb = function (val) {
2327
+ return this.fromJson(val);
2328
+ };
2329
+ ValueListInfo.prototype.toDb = function (val) {
2330
+ return this.toJson(val);
2331
+ };
2332
+ ValueListInfo.prototype.toInput = function (val, inputType) {
2333
+ return this.toJson(val);
2334
+ };
2335
+ ValueListInfo.prototype.fromInput = function (val, inputType) {
2336
+ return this.fromJson(val);
2337
+ };
2338
+ ValueListInfo.prototype.displayValue = function (val) {
2339
+ if (!val)
2340
+ return '';
2341
+ return val.caption;
2342
+ };
2343
+ return ValueListInfo;
2344
+ }());
2345
+ exports.ValueListInfo = ValueListInfo;
2346
+ var typeCache = new Map();
2347
+ function getValueList(type) {
2348
+ return ValueListInfo.get(type).getValues();
2217
2349
  }
2218
- exports.UuidField = UuidField;
2219
- function Field() {
2350
+ exports.getValueList = getValueList;
2351
+ function Field(valueType) {
2220
2352
  var options = [];
2221
- for (var _i = 0; _i < arguments.length; _i++) {
2222
- options[_i] = arguments[_i];
2353
+ for (var _i = 1; _i < arguments.length; _i++) {
2354
+ options[_i - 1] = arguments[_i];
2223
2355
  }
2224
2356
  return function (target, key, c) {
2225
2357
  var factory = function (remult) {
2226
2358
  var r = buildOptions(options, remult);
2359
+ if (!r.valueType && valueType) {
2360
+ r.valueType = valueType();
2361
+ }
2227
2362
  if (!r.key) {
2228
2363
  r.key = key;
2229
2364
  }
@@ -2260,13 +2395,13 @@ function Field() {
2260
2395
  };
2261
2396
  }
2262
2397
  exports.Field = Field;
2263
- var storableMember = Symbol("storableMember");
2398
+ exports.storableMember = Symbol("storableMember");
2264
2399
  function buildOptions(options, remult) {
2265
- var e_30, _a;
2400
+ var e_31, _a;
2266
2401
  var r = {};
2267
2402
  try {
2268
- for (var options_1 = tslib_1.__values(options), options_1_1 = options_1.next(); !options_1_1.done; options_1_1 = options_1.next()) {
2269
- var o = options_1_1.value;
2403
+ for (var options_2 = tslib_1.__values(options), options_2_1 = options_2.next(); !options_2_1.done; options_2_1 = options_2.next()) {
2404
+ var o = options_2_1.value;
2270
2405
  if (o) {
2271
2406
  if (typeof o === "function")
2272
2407
  o(r, remult);
@@ -2275,18 +2410,18 @@ function buildOptions(options, remult) {
2275
2410
  }
2276
2411
  }
2277
2412
  }
2278
- catch (e_30_1) { e_30 = { error: e_30_1 }; }
2413
+ catch (e_31_1) { e_31 = { error: e_31_1 }; }
2279
2414
  finally {
2280
2415
  try {
2281
- if (options_1_1 && !options_1_1.done && (_a = options_1.return)) _a.call(options_1);
2416
+ if (options_2_1 && !options_2_1.done && (_a = options_2.return)) _a.call(options_2);
2282
2417
  }
2283
- finally { if (e_30) throw e_30.error; }
2418
+ finally { if (e_31) throw e_31.error; }
2284
2419
  }
2285
2420
  return r;
2286
2421
  }
2287
2422
  function decorateColumnSettings(settings, remult) {
2288
2423
  if (settings.valueType) {
2289
- var settingsOnTypeLevel = Reflect.getMetadata(storableMember, settings.valueType);
2424
+ var settingsOnTypeLevel = Reflect.getMetadata(exports.storableMember, settings.valueType);
2290
2425
  if (settingsOnTypeLevel) {
2291
2426
  settings = tslib_1.__assign(tslib_1.__assign({}, buildOptions(settingsOnTypeLevel, remult)), settings);
2292
2427
  }
@@ -2302,18 +2437,18 @@ function decorateColumnSettings(settings, remult) {
2302
2437
  if (settings.valueType == Number) {
2303
2438
  var x = settings;
2304
2439
  if (!settings.valueConverter)
2305
- x.valueConverter = valueConverters_1.NumberValueConverter;
2440
+ x.valueConverter = valueConverters_1.ValueConverters.Number;
2306
2441
  }
2307
2442
  if (settings.valueType == Date) {
2308
2443
  var x = settings;
2309
2444
  if (!settings.valueConverter) {
2310
- x.valueConverter = valueConverters_1.DateValueConverter;
2445
+ x.valueConverter = valueConverters_1.ValueConverters.Date;
2311
2446
  }
2312
2447
  }
2313
2448
  if (settings.valueType == Boolean) {
2314
2449
  var x = settings;
2315
2450
  if (!x.valueConverter)
2316
- x.valueConverter = valueConverters_1.BoolValueConverter;
2451
+ x.valueConverter = valueConverters_1.ValueConverters.Boolean;
2317
2452
  }
2318
2453
  if (!settings.valueConverter) {
2319
2454
  var ei = getEntitySettings(settings.valueType, false);
@@ -2324,7 +2459,7 @@ function decorateColumnSettings(settings, remult) {
2324
2459
  };
2325
2460
  }
2326
2461
  else
2327
- settings.valueConverter = valueConverters_1.DefaultValueConverter;
2462
+ settings.valueConverter = valueConverters_1.ValueConverters.Default;
2328
2463
  }
2329
2464
  if (!settings.valueConverter.toJson) {
2330
2465
  settings.valueConverter.toJson = function (x) { return x; };
@@ -2372,16 +2507,17 @@ function Entity(key) {
2372
2507
  if (Object.prototype.hasOwnProperty.call(target, customFilterMember)) {
2373
2508
  var element = target[customFilterMember];
2374
2509
  if ((_a = element === null || element === void 0 ? void 0 : element.customFilterInfo) === null || _a === void 0 ? void 0 : _a.customFilterTranslator) {
2375
- element.customFilterInfo.key = customFilterMember;
2510
+ if (!element.customFilterInfo.key)
2511
+ element.customFilterInfo.key = customFilterMember;
2376
2512
  }
2377
2513
  }
2378
2514
  }
2379
2515
  var factory = function (remult) {
2380
- var e_31, _a;
2516
+ var e_32, _a;
2381
2517
  var r = {};
2382
2518
  try {
2383
- for (var options_2 = tslib_1.__values(options), options_2_1 = options_2.next(); !options_2_1.done; options_2_1 = options_2.next()) {
2384
- var o = options_2_1.value;
2519
+ for (var options_3 = tslib_1.__values(options), options_3_1 = options_3.next(); !options_3_1.done; options_3_1 = options_3.next()) {
2520
+ var o = options_3_1.value;
2385
2521
  if (o) {
2386
2522
  if (typeof o === "function")
2387
2523
  o(r, remult);
@@ -2390,12 +2526,12 @@ function Entity(key) {
2390
2526
  }
2391
2527
  }
2392
2528
  }
2393
- catch (e_31_1) { e_31 = { error: e_31_1 }; }
2529
+ catch (e_32_1) { e_32 = { error: e_32_1 }; }
2394
2530
  finally {
2395
2531
  try {
2396
- if (options_2_1 && !options_2_1.done && (_a = options_2.return)) _a.call(options_2);
2532
+ if (options_3_1 && !options_3_1.done && (_a = options_3.return)) _a.call(options_3);
2397
2533
  }
2398
- finally { if (e_31) throw e_31.error; }
2534
+ finally { if (e_32) throw e_32.error; }
2399
2535
  }
2400
2536
  var base = Object.getPrototypeOf(target);
2401
2537
  if (base) {
@@ -2501,9 +2637,9 @@ var QueryResultImpl = /** @class */ (function () {
2501
2637
  });
2502
2638
  };
2503
2639
  QueryResultImpl.prototype.forEach = function (what) {
2504
- var e_32, _a;
2640
+ var e_33, _a;
2505
2641
  return tslib_1.__awaiter(this, void 0, void 0, function () {
2506
- var i, _b, _c, x, e_32_1;
2642
+ var i, _b, _c, x, e_33_1;
2507
2643
  return tslib_1.__generator(this, function (_d) {
2508
2644
  switch (_d.label) {
2509
2645
  case 0:
@@ -2525,8 +2661,8 @@ var QueryResultImpl = /** @class */ (function () {
2525
2661
  case 5: return [3 /*break*/, 2];
2526
2662
  case 6: return [3 /*break*/, 13];
2527
2663
  case 7:
2528
- e_32_1 = _d.sent();
2529
- e_32 = { error: e_32_1 };
2664
+ e_33_1 = _d.sent();
2665
+ e_33 = { error: e_33_1 };
2530
2666
  return [3 /*break*/, 13];
2531
2667
  case 8:
2532
2668
  _d.trys.push([8, , 11, 12]);
@@ -2537,7 +2673,7 @@ var QueryResultImpl = /** @class */ (function () {
2537
2673
  _d.label = 10;
2538
2674
  case 10: return [3 /*break*/, 12];
2539
2675
  case 11:
2540
- if (e_32) throw e_32.error;
2676
+ if (e_33) throw e_33.error;
2541
2677
  return [7 /*endfinally*/];
2542
2678
  case 12: return [7 /*endfinally*/];
2543
2679
  case 13: return [2 /*return*/, i];
@@ -13,7 +13,7 @@ export interface EntityRef<entityType> extends Subscribable {
13
13
  isNew(): boolean;
14
14
  wasChanged(): boolean;
15
15
  wasDeleted(): boolean;
16
- fields: Fields<entityType>;
16
+ fields: FieldsRef<entityType>;
17
17
  error: string;
18
18
  getId(): any;
19
19
  repository: Repository<entityType>;
@@ -27,7 +27,7 @@ export interface EntityRef<entityType> extends Subscribable {
27
27
  }
28
28
  export interface ControllerRef<entityType> extends Subscribable {
29
29
  hasErrors(): boolean;
30
- fields: Fields<entityType>;
30
+ fields: FieldsRef<entityType>;
31
31
  error: string;
32
32
  validate(): Promise<boolean>;
33
33
  readonly isLoading: boolean;
@@ -40,7 +40,7 @@ export declare type RefSubscriber = (() => void) | RefSubscriberBase;
40
40
  export interface Subscribable {
41
41
  subscribe(listener: RefSubscriber): Unobserve;
42
42
  }
43
- export declare type Fields<entityType> = {
43
+ export declare type FieldsRef<entityType> = {
44
44
  [Properties in keyof OmitEB<entityType>]: entityType[Properties] extends {
45
45
  id: (number | string);
46
46
  } ? IdFieldRef<entityType, entityType[Properties]> : FieldRef<entityType, entityType[Properties]>;