remult 0.12.9 → 0.13.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.
- package/graphql.js +2 -2
- package/index.d.ts +2 -1
- package/index.js +6 -5
- package/package.json +1 -1
- package/postgres/postgres-data-provider.js +3 -2
- package/postgres/postgresColumnSyntax.js +1 -1
- package/remult-knex/index.js +6 -5
- package/remult-mongo.js +1 -1
- package/server/expressBridge.js +8 -8
- package/src/backend-tests/backend-database-test-setup.backend-spec.d.ts +1 -1
- package/src/backend-tests/backend-database-test-setup.backend-spec.js +1 -1
- package/src/context.js +1 -1
- package/src/data-api.js +73 -52
- package/src/data-providers/array-entity-data-provider.js +8 -7
- package/src/data-providers/web-sql-data-provider.js +12 -6
- package/src/entity.d.ts +0 -1
- package/src/filter/filter-interfaces.d.ts +2 -2
- package/src/filter/filter-interfaces.js +5 -2
- package/src/id-entity.js +1 -5
- package/src/remult3/RepositoryImplementation.d.ts +53 -16
- package/src/remult3/RepositoryImplementation.js +209 -73
- package/src/remult3/remult3.d.ts +3 -3
- package/src/shared-tests/db-tests.db-tests.js +43 -24
- package/src/shared-tests/entityWithValidations.js +2 -2
- package/src/shared-tests/test-custom-id-column.spec.js +4 -4
- package/src/shared-tests/test-special-value.spec.js +2 -2
- package/src/shared-tests/test-update-with-null.spec.js +2 -2
- package/src/tests/c.js +2 -2
- package/src/tests/d.js +2 -2
- package/src/tests/dWithPrefilter.js +2 -2
- package/src/tests/entityForCustomFilter.js +1 -1
- package/src/tests/entityWithValidationsOnColumn.js +2 -2
- package/src/tests/h.js +6 -4
- package/src/tests/remult-3-entities.js +11 -11
- package/src/tests/tasks.js +3 -3
- package/src/validators.d.ts +5 -3
- package/src/validators.js +9 -7
- package/valueConverters.d.ts +11 -24
- 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,
|
|
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():
|
|
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():
|
|
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):
|
|
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:
|
|
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:
|
|
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
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
export declare
|
|
214
|
-
|
|
215
|
-
|
|
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 $():
|
|
269
|
+
get $(): FieldsRef<this>;
|
|
233
270
|
}
|
|
234
271
|
export declare class ControllerBase {
|
|
235
272
|
protected remult: Remult;
|
|
236
273
|
constructor(remult: Remult);
|
|
237
|
-
get $():
|
|
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.
|
|
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
|
|
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
|
-
|
|
2161
|
-
|
|
2162
|
-
|
|
2163
|
-
|
|
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
|
-
|
|
2180
|
-
|
|
2181
|
-
|
|
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
|
-
|
|
2190
|
-
|
|
2191
|
-
|
|
2192
|
-
|
|
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.
|
|
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 =
|
|
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
|
|
2209
|
-
|
|
2210
|
-
|
|
2211
|
-
|
|
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
|
-
|
|
2214
|
-
|
|
2215
|
-
|
|
2216
|
-
|
|
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.
|
|
2219
|
-
function Field() {
|
|
2350
|
+
exports.getValueList = getValueList;
|
|
2351
|
+
function Field(valueType) {
|
|
2220
2352
|
var options = [];
|
|
2221
|
-
for (var _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
|
-
|
|
2398
|
+
exports.storableMember = Symbol("storableMember");
|
|
2264
2399
|
function buildOptions(options, remult) {
|
|
2265
|
-
var
|
|
2400
|
+
var e_31, _a;
|
|
2266
2401
|
var r = {};
|
|
2267
2402
|
try {
|
|
2268
|
-
for (var
|
|
2269
|
-
var o =
|
|
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 (
|
|
2413
|
+
catch (e_31_1) { e_31 = { error: e_31_1 }; }
|
|
2279
2414
|
finally {
|
|
2280
2415
|
try {
|
|
2281
|
-
if (
|
|
2416
|
+
if (options_2_1 && !options_2_1.done && (_a = options_2.return)) _a.call(options_2);
|
|
2282
2417
|
}
|
|
2283
|
-
finally { if (
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
2510
|
+
if (!element.customFilterInfo.key)
|
|
2511
|
+
element.customFilterInfo.key = customFilterMember;
|
|
2376
2512
|
}
|
|
2377
2513
|
}
|
|
2378
2514
|
}
|
|
2379
2515
|
var factory = function (remult) {
|
|
2380
|
-
var
|
|
2516
|
+
var e_32, _a;
|
|
2381
2517
|
var r = {};
|
|
2382
2518
|
try {
|
|
2383
|
-
for (var
|
|
2384
|
-
var o =
|
|
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 (
|
|
2529
|
+
catch (e_32_1) { e_32 = { error: e_32_1 }; }
|
|
2394
2530
|
finally {
|
|
2395
2531
|
try {
|
|
2396
|
-
if (
|
|
2532
|
+
if (options_3_1 && !options_3_1.done && (_a = options_3.return)) _a.call(options_3);
|
|
2397
2533
|
}
|
|
2398
|
-
finally { if (
|
|
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
|
|
2640
|
+
var e_33, _a;
|
|
2505
2641
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
2506
|
-
var i, _b, _c, x,
|
|
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
|
-
|
|
2529
|
-
|
|
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 (
|
|
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];
|
package/src/remult3/remult3.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ export interface EntityRef<entityType> extends Subscribable {
|
|
|
13
13
|
isNew(): boolean;
|
|
14
14
|
wasChanged(): boolean;
|
|
15
15
|
wasDeleted(): boolean;
|
|
16
|
-
fields:
|
|
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:
|
|
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
|
|
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]>;
|