remult 0.12.8 → 0.13.2
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/readme.md +7 -1
- package/remult-knex/index.js +6 -5
- package/remult-mongo.js +1 -1
- package/server/expressBridge.js +9 -9
- 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 +224 -78
- package/src/remult3/remult3.d.ts +4 -4
- 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 +26 -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");
|
|
@@ -616,6 +616,7 @@ function getEntityKey(entity) {
|
|
|
616
616
|
exports.getEntityKey = getEntityKey;
|
|
617
617
|
exports.columnsOfType = new Map();
|
|
618
618
|
function createOldEntity(entity, remult) {
|
|
619
|
+
var _this = this;
|
|
619
620
|
var r = exports.columnsOfType.get(entity);
|
|
620
621
|
if (!r)
|
|
621
622
|
exports.columnsOfType.set(entity, r = []);
|
|
@@ -634,12 +635,21 @@ function createOldEntity(entity, remult) {
|
|
|
634
635
|
info = tslib_1.__assign(tslib_1.__assign({}, baseSettings_1), info);
|
|
635
636
|
var functions = ["saving", "saved", "deleting", "deleted", "validation"];
|
|
636
637
|
var _loop_2 = function (key_1) {
|
|
637
|
-
if (baseSettings_1[key_1]) {
|
|
638
|
+
if (baseSettings_1[key_1] && baseSettings_1[key_1] !== info[key_1]) {
|
|
638
639
|
var x_1 = info[key_1];
|
|
639
|
-
info[key_1] = function (a, b) {
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
640
|
+
info[key_1] = function (a, b) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
641
|
+
return tslib_1.__generator(this, function (_a) {
|
|
642
|
+
switch (_a.label) {
|
|
643
|
+
case 0: return [4 /*yield*/, x_1(a, b)];
|
|
644
|
+
case 1:
|
|
645
|
+
_a.sent();
|
|
646
|
+
return [4 /*yield*/, baseSettings_1[key_1](a, b)];
|
|
647
|
+
case 2:
|
|
648
|
+
_a.sent();
|
|
649
|
+
return [2 /*return*/];
|
|
650
|
+
}
|
|
651
|
+
});
|
|
652
|
+
}); };
|
|
643
653
|
}
|
|
644
654
|
};
|
|
645
655
|
try {
|
|
@@ -1238,7 +1248,7 @@ var rowHelperImplementation = /** @class */ (function (_super) {
|
|
|
1238
1248
|
try {
|
|
1239
1249
|
for (_d = tslib_1.__values(this.metadata.fields), _e = _d.next(); !_e.done; _e = _d.next()) {
|
|
1240
1250
|
field = _e.value;
|
|
1241
|
-
if (field.dbReadOnly
|
|
1251
|
+
if (field.dbReadOnly) {
|
|
1242
1252
|
d[field.key] = undefined;
|
|
1243
1253
|
ignoreKeys.push(field.key);
|
|
1244
1254
|
f = this.fields.find(field);
|
|
@@ -2075,7 +2085,6 @@ var EntityFullInfo = /** @class */ (function () {
|
|
|
2075
2085
|
finally { if (e_29) throw e_29.error; }
|
|
2076
2086
|
}
|
|
2077
2087
|
this.fields = r;
|
|
2078
|
-
this.dbAutoIncrementId = entityInfo.dbAutoIncrementId;
|
|
2079
2088
|
this.caption = buildCaption(entityInfo.caption, this.key, remult);
|
|
2080
2089
|
if (entityInfo.id) {
|
|
2081
2090
|
this.idMetadata.field = entityInfo.id(this.fields);
|
|
@@ -2142,46 +2151,102 @@ function FieldType() {
|
|
|
2142
2151
|
options = [];
|
|
2143
2152
|
}
|
|
2144
2153
|
options.splice(0, 0, { valueType: target });
|
|
2145
|
-
Reflect.defineMetadata(storableMember, options, target);
|
|
2154
|
+
Reflect.defineMetadata(exports.storableMember, options, target);
|
|
2146
2155
|
return target;
|
|
2147
2156
|
};
|
|
2148
2157
|
}
|
|
2149
2158
|
exports.FieldType = FieldType;
|
|
2150
|
-
|
|
2151
|
-
|
|
2152
|
-
|
|
2153
|
-
|
|
2154
|
-
}
|
|
2155
|
-
return Field.apply(void 0, tslib_1.__spread([{
|
|
2156
|
-
valueConverter: {
|
|
2157
|
-
toDb: function (x) { return x; },
|
|
2158
|
-
fromDb: function (x) { return x; },
|
|
2159
|
-
fieldTypeInDb: 'json'
|
|
2160
|
-
}
|
|
2161
|
-
}], options));
|
|
2162
|
-
}
|
|
2163
|
-
exports.JsonField = JsonField;
|
|
2164
|
-
function DateOnlyField() {
|
|
2165
|
-
var options = [];
|
|
2166
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
2167
|
-
options[_i] = arguments[_i];
|
|
2159
|
+
exports.Fields1 = {
|
|
2160
|
+
String: function () {
|
|
2161
|
+
return function (a) {
|
|
2162
|
+
};
|
|
2168
2163
|
}
|
|
2169
|
-
|
|
2170
|
-
|
|
2171
|
-
|
|
2172
|
-
}
|
|
2173
|
-
exports.DateOnlyField = DateOnlyField;
|
|
2174
|
-
function IntegerField() {
|
|
2175
|
-
var options = [];
|
|
2176
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
2177
|
-
options[_i] = arguments[_i];
|
|
2164
|
+
};
|
|
2165
|
+
var Fields = /** @class */ (function () {
|
|
2166
|
+
function Fields() {
|
|
2178
2167
|
}
|
|
2179
|
-
|
|
2180
|
-
|
|
2181
|
-
|
|
2182
|
-
|
|
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';
|
|
2183
2248
|
}
|
|
2184
|
-
exports.
|
|
2249
|
+
exports.isAutoIncrement = isAutoIncrement;
|
|
2185
2250
|
function ValueListFieldType() {
|
|
2186
2251
|
var options = [];
|
|
2187
2252
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
@@ -2189,31 +2254,111 @@ function ValueListFieldType() {
|
|
|
2189
2254
|
}
|
|
2190
2255
|
return function (type) {
|
|
2191
2256
|
return FieldType.apply(void 0, tslib_1.__spread([function (o) {
|
|
2192
|
-
o.valueConverter =
|
|
2257
|
+
o.valueConverter = ValueListInfo.get(type),
|
|
2193
2258
|
o.displayValue = function (item, val) { return val.caption; };
|
|
2194
2259
|
}], options))(type);
|
|
2195
2260
|
};
|
|
2196
2261
|
}
|
|
2197
2262
|
exports.ValueListFieldType = ValueListFieldType;
|
|
2198
|
-
function
|
|
2199
|
-
|
|
2200
|
-
|
|
2201
|
-
|
|
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
|
+
}
|
|
2202
2302
|
}
|
|
2203
|
-
|
|
2204
|
-
|
|
2205
|
-
|
|
2206
|
-
|
|
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();
|
|
2207
2349
|
}
|
|
2208
|
-
exports.
|
|
2209
|
-
function Field() {
|
|
2350
|
+
exports.getValueList = getValueList;
|
|
2351
|
+
function Field(valueType) {
|
|
2210
2352
|
var options = [];
|
|
2211
|
-
for (var _i =
|
|
2212
|
-
options[_i] = arguments[_i];
|
|
2353
|
+
for (var _i = 1; _i < arguments.length; _i++) {
|
|
2354
|
+
options[_i - 1] = arguments[_i];
|
|
2213
2355
|
}
|
|
2214
2356
|
return function (target, key, c) {
|
|
2215
2357
|
var factory = function (remult) {
|
|
2216
2358
|
var r = buildOptions(options, remult);
|
|
2359
|
+
if (!r.valueType && valueType) {
|
|
2360
|
+
r.valueType = valueType();
|
|
2361
|
+
}
|
|
2217
2362
|
if (!r.key) {
|
|
2218
2363
|
r.key = key;
|
|
2219
2364
|
}
|
|
@@ -2250,13 +2395,13 @@ function Field() {
|
|
|
2250
2395
|
};
|
|
2251
2396
|
}
|
|
2252
2397
|
exports.Field = Field;
|
|
2253
|
-
|
|
2398
|
+
exports.storableMember = Symbol("storableMember");
|
|
2254
2399
|
function buildOptions(options, remult) {
|
|
2255
|
-
var
|
|
2400
|
+
var e_31, _a;
|
|
2256
2401
|
var r = {};
|
|
2257
2402
|
try {
|
|
2258
|
-
for (var
|
|
2259
|
-
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;
|
|
2260
2405
|
if (o) {
|
|
2261
2406
|
if (typeof o === "function")
|
|
2262
2407
|
o(r, remult);
|
|
@@ -2265,18 +2410,18 @@ function buildOptions(options, remult) {
|
|
|
2265
2410
|
}
|
|
2266
2411
|
}
|
|
2267
2412
|
}
|
|
2268
|
-
catch (
|
|
2413
|
+
catch (e_31_1) { e_31 = { error: e_31_1 }; }
|
|
2269
2414
|
finally {
|
|
2270
2415
|
try {
|
|
2271
|
-
if (
|
|
2416
|
+
if (options_2_1 && !options_2_1.done && (_a = options_2.return)) _a.call(options_2);
|
|
2272
2417
|
}
|
|
2273
|
-
finally { if (
|
|
2418
|
+
finally { if (e_31) throw e_31.error; }
|
|
2274
2419
|
}
|
|
2275
2420
|
return r;
|
|
2276
2421
|
}
|
|
2277
2422
|
function decorateColumnSettings(settings, remult) {
|
|
2278
2423
|
if (settings.valueType) {
|
|
2279
|
-
var settingsOnTypeLevel = Reflect.getMetadata(storableMember, settings.valueType);
|
|
2424
|
+
var settingsOnTypeLevel = Reflect.getMetadata(exports.storableMember, settings.valueType);
|
|
2280
2425
|
if (settingsOnTypeLevel) {
|
|
2281
2426
|
settings = tslib_1.__assign(tslib_1.__assign({}, buildOptions(settingsOnTypeLevel, remult)), settings);
|
|
2282
2427
|
}
|
|
@@ -2292,18 +2437,18 @@ function decorateColumnSettings(settings, remult) {
|
|
|
2292
2437
|
if (settings.valueType == Number) {
|
|
2293
2438
|
var x = settings;
|
|
2294
2439
|
if (!settings.valueConverter)
|
|
2295
|
-
x.valueConverter = valueConverters_1.
|
|
2440
|
+
x.valueConverter = valueConverters_1.ValueConverters.Number;
|
|
2296
2441
|
}
|
|
2297
2442
|
if (settings.valueType == Date) {
|
|
2298
2443
|
var x = settings;
|
|
2299
2444
|
if (!settings.valueConverter) {
|
|
2300
|
-
x.valueConverter = valueConverters_1.
|
|
2445
|
+
x.valueConverter = valueConverters_1.ValueConverters.Date;
|
|
2301
2446
|
}
|
|
2302
2447
|
}
|
|
2303
2448
|
if (settings.valueType == Boolean) {
|
|
2304
2449
|
var x = settings;
|
|
2305
2450
|
if (!x.valueConverter)
|
|
2306
|
-
x.valueConverter = valueConverters_1.
|
|
2451
|
+
x.valueConverter = valueConverters_1.ValueConverters.Boolean;
|
|
2307
2452
|
}
|
|
2308
2453
|
if (!settings.valueConverter) {
|
|
2309
2454
|
var ei = getEntitySettings(settings.valueType, false);
|
|
@@ -2314,7 +2459,7 @@ function decorateColumnSettings(settings, remult) {
|
|
|
2314
2459
|
};
|
|
2315
2460
|
}
|
|
2316
2461
|
else
|
|
2317
|
-
settings.valueConverter = valueConverters_1.
|
|
2462
|
+
settings.valueConverter = valueConverters_1.ValueConverters.Default;
|
|
2318
2463
|
}
|
|
2319
2464
|
if (!settings.valueConverter.toJson) {
|
|
2320
2465
|
settings.valueConverter.toJson = function (x) { return x; };
|
|
@@ -2362,16 +2507,17 @@ function Entity(key) {
|
|
|
2362
2507
|
if (Object.prototype.hasOwnProperty.call(target, customFilterMember)) {
|
|
2363
2508
|
var element = target[customFilterMember];
|
|
2364
2509
|
if ((_a = element === null || element === void 0 ? void 0 : element.customFilterInfo) === null || _a === void 0 ? void 0 : _a.customFilterTranslator) {
|
|
2365
|
-
element.customFilterInfo.key
|
|
2510
|
+
if (!element.customFilterInfo.key)
|
|
2511
|
+
element.customFilterInfo.key = customFilterMember;
|
|
2366
2512
|
}
|
|
2367
2513
|
}
|
|
2368
2514
|
}
|
|
2369
2515
|
var factory = function (remult) {
|
|
2370
|
-
var
|
|
2516
|
+
var e_32, _a;
|
|
2371
2517
|
var r = {};
|
|
2372
2518
|
try {
|
|
2373
|
-
for (var
|
|
2374
|
-
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;
|
|
2375
2521
|
if (o) {
|
|
2376
2522
|
if (typeof o === "function")
|
|
2377
2523
|
o(r, remult);
|
|
@@ -2380,12 +2526,12 @@ function Entity(key) {
|
|
|
2380
2526
|
}
|
|
2381
2527
|
}
|
|
2382
2528
|
}
|
|
2383
|
-
catch (
|
|
2529
|
+
catch (e_32_1) { e_32 = { error: e_32_1 }; }
|
|
2384
2530
|
finally {
|
|
2385
2531
|
try {
|
|
2386
|
-
if (
|
|
2532
|
+
if (options_3_1 && !options_3_1.done && (_a = options_3.return)) _a.call(options_3);
|
|
2387
2533
|
}
|
|
2388
|
-
finally { if (
|
|
2534
|
+
finally { if (e_32) throw e_32.error; }
|
|
2389
2535
|
}
|
|
2390
2536
|
var base = Object.getPrototypeOf(target);
|
|
2391
2537
|
if (base) {
|
|
@@ -2491,9 +2637,9 @@ var QueryResultImpl = /** @class */ (function () {
|
|
|
2491
2637
|
});
|
|
2492
2638
|
};
|
|
2493
2639
|
QueryResultImpl.prototype.forEach = function (what) {
|
|
2494
|
-
var
|
|
2640
|
+
var e_33, _a;
|
|
2495
2641
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
2496
|
-
var i, _b, _c, x,
|
|
2642
|
+
var i, _b, _c, x, e_33_1;
|
|
2497
2643
|
return tslib_1.__generator(this, function (_d) {
|
|
2498
2644
|
switch (_d.label) {
|
|
2499
2645
|
case 0:
|
|
@@ -2515,8 +2661,8 @@ var QueryResultImpl = /** @class */ (function () {
|
|
|
2515
2661
|
case 5: return [3 /*break*/, 2];
|
|
2516
2662
|
case 6: return [3 /*break*/, 13];
|
|
2517
2663
|
case 7:
|
|
2518
|
-
|
|
2519
|
-
|
|
2664
|
+
e_33_1 = _d.sent();
|
|
2665
|
+
e_33 = { error: e_33_1 };
|
|
2520
2666
|
return [3 /*break*/, 13];
|
|
2521
2667
|
case 8:
|
|
2522
2668
|
_d.trys.push([8, , 11, 12]);
|
|
@@ -2527,7 +2673,7 @@ var QueryResultImpl = /** @class */ (function () {
|
|
|
2527
2673
|
_d.label = 10;
|
|
2528
2674
|
case 10: return [3 /*break*/, 12];
|
|
2529
2675
|
case 11:
|
|
2530
|
-
if (
|
|
2676
|
+
if (e_33) throw e_33.error;
|
|
2531
2677
|
return [7 /*endfinally*/];
|
|
2532
2678
|
case 12: return [7 /*endfinally*/];
|
|
2533
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]>;
|
|
@@ -50,7 +50,7 @@ export declare type Fields<entityType> = {
|
|
|
50
50
|
toArray(): FieldRef<entityType, any>[];
|
|
51
51
|
};
|
|
52
52
|
export declare type FieldsMetadata<entityType> = {
|
|
53
|
-
[Properties in keyof OmitEB<entityType>]: FieldMetadata
|
|
53
|
+
[Properties in keyof OmitEB<entityType>]: FieldMetadata<entityType[Properties]>;
|
|
54
54
|
} & {
|
|
55
55
|
find(fieldMetadataOrKey: FieldMetadata | string): FieldMetadata;
|
|
56
56
|
[Symbol.iterator]: () => IterableIterator<FieldMetadata>;
|