remult 0.11.1 → 0.12.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/index.d.ts +1 -1
- package/index.js +2 -1
- package/package.json +1 -1
- package/postgres/postgres-data-provider.d.ts +3 -3
- package/postgres/postgres-data-provider.js +136 -190
- package/remult-knex/index.d.ts +6 -5
- package/remult-knex/index.js +251 -289
- package/remult-mongo.js +150 -217
- package/server/expressBridge.js +1 -1
- 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 +75 -52
- package/src/data-providers/sql-database.d.ts +0 -2
- package/src/data-providers/sql-database.js +199 -298
- package/src/data-providers/web-sql-data-provider.js +38 -56
- package/src/filter/filter-consumer-bridge-to-sql-request.d.ts +15 -1
- package/src/filter/filter-consumer-bridge-to-sql-request.js +80 -50
- package/src/remult3/RepositoryImplementation.d.ts +4 -0
- package/src/remult3/RepositoryImplementation.js +15 -1
- package/src/shared-tests/db-tests.db-tests.js +63 -2
- package/src/shared-tests/test-custom-id-column.spec.js +4 -3
- package/src/tests/entityForCustomFilter.js +24 -22
- package/valueConverters.js +1 -1
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.WebSqlDataProvider = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var sql_database_1 = require("./sql-database");
|
|
6
|
+
var filter_consumer_bridge_to_sql_request_1 = require("../filter/filter-consumer-bridge-to-sql-request");
|
|
6
7
|
//SqlDatabase.LogToConsole = true;
|
|
7
8
|
var WebSqlDataProvider = /** @class */ (function () {
|
|
8
9
|
function WebSqlDataProvider(databaseName) {
|
|
@@ -27,19 +28,18 @@ var WebSqlDataProvider = /** @class */ (function () {
|
|
|
27
28
|
};
|
|
28
29
|
WebSqlDataProvider.prototype.dropTable = function (entity) {
|
|
29
30
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
30
|
-
var
|
|
31
|
-
return tslib_1.__generator(this, function (
|
|
32
|
-
switch (
|
|
33
|
-
case 0:
|
|
34
|
-
_a = 'drop table if exists ';
|
|
35
|
-
return [4 /*yield*/, entity.getDbName()];
|
|
31
|
+
var e, sql;
|
|
32
|
+
return tslib_1.__generator(this, function (_a) {
|
|
33
|
+
switch (_a.label) {
|
|
34
|
+
case 0: return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.getDbNameProvider(entity)];
|
|
36
35
|
case 1:
|
|
37
|
-
|
|
36
|
+
e = _a.sent();
|
|
37
|
+
sql = 'drop table if exists ' + e.entityName;
|
|
38
38
|
if (sql_database_1.SqlDatabase.LogToConsole)
|
|
39
39
|
console.log(sql);
|
|
40
40
|
return [4 /*yield*/, this.createCommand().execute(sql)];
|
|
41
41
|
case 2:
|
|
42
|
-
|
|
42
|
+
_a.sent();
|
|
43
43
|
return [2 /*return*/];
|
|
44
44
|
}
|
|
45
45
|
});
|
|
@@ -47,62 +47,44 @@ var WebSqlDataProvider = /** @class */ (function () {
|
|
|
47
47
|
};
|
|
48
48
|
WebSqlDataProvider.prototype.createTable = function (entity) {
|
|
49
49
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
50
|
-
var result, _a, _b, x,
|
|
51
|
-
var e_1,
|
|
52
|
-
return tslib_1.__generator(this, function (
|
|
53
|
-
switch (
|
|
50
|
+
var result, e, _a, _b, x, sql;
|
|
51
|
+
var e_1, _c;
|
|
52
|
+
return tslib_1.__generator(this, function (_d) {
|
|
53
|
+
switch (_d.label) {
|
|
54
54
|
case 0:
|
|
55
55
|
result = '';
|
|
56
|
-
|
|
56
|
+
return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.getDbNameProvider(entity)];
|
|
57
57
|
case 1:
|
|
58
|
-
|
|
59
|
-
_a = tslib_1.__values(entity.fields), _b = _a.next();
|
|
60
|
-
_h.label = 2;
|
|
61
|
-
case 2:
|
|
62
|
-
if (!!_b.done) return [3 /*break*/, 6];
|
|
63
|
-
x = _b.value;
|
|
64
|
-
return [4 /*yield*/, sql_database_1.isDbReadonly(x)];
|
|
65
|
-
case 3:
|
|
66
|
-
if (!!(_h.sent())) return [3 /*break*/, 5];
|
|
67
|
-
if (result.length != 0)
|
|
68
|
-
result += ',';
|
|
69
|
-
result += '\r\n ';
|
|
70
|
-
_c = result;
|
|
71
|
-
_d = this.addColumnSqlSyntax;
|
|
72
|
-
_e = [x];
|
|
73
|
-
return [4 /*yield*/, x.getDbName()];
|
|
74
|
-
case 4:
|
|
75
|
-
result = _c + _d.apply(this, _e.concat([_h.sent()]));
|
|
76
|
-
if (x.key == entity.idMetadata.field.key) {
|
|
77
|
-
result += ' primary key';
|
|
78
|
-
if (entity.options.dbAutoIncrementId)
|
|
79
|
-
result += " autoincrement";
|
|
80
|
-
}
|
|
81
|
-
_h.label = 5;
|
|
82
|
-
case 5:
|
|
83
|
-
_b = _a.next();
|
|
84
|
-
return [3 /*break*/, 2];
|
|
85
|
-
case 6: return [3 /*break*/, 9];
|
|
86
|
-
case 7:
|
|
87
|
-
e_1_1 = _h.sent();
|
|
88
|
-
e_1 = { error: e_1_1 };
|
|
89
|
-
return [3 /*break*/, 9];
|
|
90
|
-
case 8:
|
|
58
|
+
e = _d.sent();
|
|
91
59
|
try {
|
|
92
|
-
|
|
60
|
+
for (_a = tslib_1.__values(entity.fields), _b = _a.next(); !_b.done; _b = _a.next()) {
|
|
61
|
+
x = _b.value;
|
|
62
|
+
if (!e.isDbReadonly(x)) {
|
|
63
|
+
if (result.length != 0)
|
|
64
|
+
result += ',';
|
|
65
|
+
result += '\r\n ';
|
|
66
|
+
result += this.addColumnSqlSyntax(x, e.nameOf(x));
|
|
67
|
+
if (x.key == entity.idMetadata.field.key) {
|
|
68
|
+
result += ' primary key';
|
|
69
|
+
if (entity.options.dbAutoIncrementId)
|
|
70
|
+
result += " autoincrement";
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
93
74
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
75
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
76
|
+
finally {
|
|
77
|
+
try {
|
|
78
|
+
if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
|
|
79
|
+
}
|
|
80
|
+
finally { if (e_1) throw e_1.error; }
|
|
81
|
+
}
|
|
82
|
+
sql = 'create table if not exists ' + e.entityName + ' (' + result + '\r\n)';
|
|
101
83
|
if (sql_database_1.SqlDatabase.LogToConsole)
|
|
102
84
|
console.log(sql);
|
|
103
85
|
return [4 /*yield*/, this.createCommand().execute(sql)];
|
|
104
|
-
case
|
|
105
|
-
|
|
86
|
+
case 2:
|
|
87
|
+
_d.sent();
|
|
106
88
|
return [2 /*return*/];
|
|
107
89
|
}
|
|
108
90
|
});
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import { SqlCommand } from "../sql-command";
|
|
2
2
|
import { Filter, FilterConsumer } from './filter-interfaces';
|
|
3
3
|
import { FieldMetadata } from "../column-interfaces";
|
|
4
|
+
import { EntityMetadata } from "../..";
|
|
4
5
|
export declare class FilterConsumerBridgeToSqlRequest implements FilterConsumer {
|
|
5
6
|
private r;
|
|
7
|
+
private nameProvider;
|
|
6
8
|
private where;
|
|
7
9
|
_addWhere: boolean;
|
|
8
10
|
promises: Promise<void>[];
|
|
9
11
|
resolveWhere(): Promise<string>;
|
|
10
|
-
constructor(r: SqlCommand);
|
|
12
|
+
constructor(r: SqlCommand, nameProvider: dbNameProvider);
|
|
11
13
|
custom(key: string, customItem: any): void;
|
|
12
14
|
or(orElements: Filter[]): void;
|
|
13
15
|
isNull(col: FieldMetadata): void;
|
|
@@ -34,3 +36,15 @@ export declare class CustomSqlFilterBuilder {
|
|
|
34
36
|
sql: string;
|
|
35
37
|
addParameterAndReturnSqlToken<valueType>(val: valueType, field?: FieldMetadata<valueType>): string;
|
|
36
38
|
}
|
|
39
|
+
export declare function getDbNameProvider(meta: EntityMetadata): Promise<dbNameProvider>;
|
|
40
|
+
export declare class dbNameProviderImpl {
|
|
41
|
+
map: Map<string, string>;
|
|
42
|
+
nameOf(field: FieldMetadata<any>): string;
|
|
43
|
+
entityName: string;
|
|
44
|
+
isDbReadonly(x: FieldMetadata): boolean;
|
|
45
|
+
}
|
|
46
|
+
export interface dbNameProvider {
|
|
47
|
+
nameOf(field: FieldMetadata<any>): string;
|
|
48
|
+
entityName: string;
|
|
49
|
+
isDbReadonly(x: FieldMetadata): boolean;
|
|
50
|
+
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CustomSqlFilterBuilder = exports.FilterConsumerBridgeToSqlRequest = void 0;
|
|
3
|
+
exports.dbNameProviderImpl = exports.getDbNameProvider = exports.CustomSqlFilterBuilder = exports.FilterConsumerBridgeToSqlRequest = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var FilterConsumerBridgeToSqlRequest = /** @class */ (function () {
|
|
6
|
-
function FilterConsumerBridgeToSqlRequest(r) {
|
|
6
|
+
function FilterConsumerBridgeToSqlRequest(r, nameProvider) {
|
|
7
7
|
this.r = r;
|
|
8
|
+
this.nameProvider = nameProvider;
|
|
8
9
|
this.where = "";
|
|
9
10
|
this._addWhere = true;
|
|
10
11
|
this.promises = [];
|
|
@@ -69,7 +70,7 @@ var FilterConsumerBridgeToSqlRequest = /** @class */ (function () {
|
|
|
69
70
|
case 1:
|
|
70
71
|
if (!!orElements_1_1.done) return [3 /*break*/, 4];
|
|
71
72
|
element = orElements_1_1.value;
|
|
72
|
-
f = new FilterConsumerBridgeToSqlRequest(this.r);
|
|
73
|
+
f = new FilterConsumerBridgeToSqlRequest(this.r, this.nameProvider);
|
|
73
74
|
f._addWhere = false;
|
|
74
75
|
element.__applyToConsumer(f);
|
|
75
76
|
return [4 /*yield*/, f.resolveWhere()];
|
|
@@ -109,45 +110,26 @@ var FilterConsumerBridgeToSqlRequest = /** @class */ (function () {
|
|
|
109
110
|
};
|
|
110
111
|
FilterConsumerBridgeToSqlRequest.prototype.isNull = function (col) {
|
|
111
112
|
var _this = this;
|
|
112
|
-
this.promises.push((function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
113
|
-
|
|
114
|
-
case 0:
|
|
115
|
-
_a = this.addToWhere;
|
|
116
|
-
return [4 /*yield*/, col.getDbName()];
|
|
117
|
-
case 1: return [2 /*return*/, _a.apply(this, [(_b.sent()) + ' is null'])];
|
|
118
|
-
}
|
|
113
|
+
this.promises.push((function () { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
|
|
114
|
+
return [2 /*return*/, this.addToWhere(this.nameProvider.nameOf(col) + ' is null')];
|
|
119
115
|
}); }); })());
|
|
120
116
|
};
|
|
121
117
|
FilterConsumerBridgeToSqlRequest.prototype.isNotNull = function (col) {
|
|
122
118
|
var _this = this;
|
|
123
|
-
this.promises.push((function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
124
|
-
|
|
125
|
-
case 0:
|
|
126
|
-
_a = this.addToWhere;
|
|
127
|
-
return [4 /*yield*/, col.getDbName()];
|
|
128
|
-
case 1: return [2 /*return*/, _a.apply(this, [(_b.sent()) + ' is not null'])];
|
|
129
|
-
}
|
|
119
|
+
this.promises.push((function () { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
|
|
120
|
+
return [2 /*return*/, this.addToWhere(this.nameProvider.nameOf(col) + ' is not null')];
|
|
130
121
|
}); }); })());
|
|
131
122
|
};
|
|
132
123
|
FilterConsumerBridgeToSqlRequest.prototype.isIn = function (col, val) {
|
|
133
124
|
var _this = this;
|
|
134
125
|
this.promises.push((function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
135
|
-
var _a;
|
|
136
126
|
var _this = this;
|
|
137
|
-
return tslib_1.__generator(this, function (
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
case 1:
|
|
144
|
-
_a.apply(this, [(_b.sent()) + " in (" + val.map(function (x) { return _this.r.addParameterAndReturnSqlToken(col.valueConverter.toDb(x)); }).join(",") + ")"]);
|
|
145
|
-
return [3 /*break*/, 3];
|
|
146
|
-
case 2:
|
|
147
|
-
this.addToWhere('1 = 0 /*isIn with no values*/');
|
|
148
|
-
_b.label = 3;
|
|
149
|
-
case 3: return [2 /*return*/];
|
|
150
|
-
}
|
|
127
|
+
return tslib_1.__generator(this, function (_a) {
|
|
128
|
+
if (val && val.length > 0)
|
|
129
|
+
this.addToWhere(this.nameProvider.nameOf(col) + " in (" + val.map(function (x) { return _this.r.addParameterAndReturnSqlToken(col.valueConverter.toDb(x)); }).join(",") + ")");
|
|
130
|
+
else
|
|
131
|
+
this.addToWhere('1 = 0 /*isIn with no values*/');
|
|
132
|
+
return [2 /*return*/];
|
|
151
133
|
});
|
|
152
134
|
}); })());
|
|
153
135
|
};
|
|
@@ -172,17 +154,9 @@ var FilterConsumerBridgeToSqlRequest = /** @class */ (function () {
|
|
|
172
154
|
FilterConsumerBridgeToSqlRequest.prototype.containsCaseInsensitive = function (col, val) {
|
|
173
155
|
var _this = this;
|
|
174
156
|
this.promises.push((function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
case 0:
|
|
179
|
-
_a = this.addToWhere;
|
|
180
|
-
_b = 'lower (';
|
|
181
|
-
return [4 /*yield*/, col.getDbName()];
|
|
182
|
-
case 1:
|
|
183
|
-
_a.apply(this, [_b + (_c.sent()) + ") like lower ('%" + val.replace(/'/g, '\'\'') + "%')"]);
|
|
184
|
-
return [2 /*return*/];
|
|
185
|
-
}
|
|
157
|
+
return tslib_1.__generator(this, function (_a) {
|
|
158
|
+
this.addToWhere('lower (' + this.nameProvider.nameOf(col) + ") like lower ('%" + val.replace(/'/g, '\'\'') + "%')");
|
|
159
|
+
return [2 /*return*/];
|
|
186
160
|
});
|
|
187
161
|
}); })());
|
|
188
162
|
};
|
|
@@ -191,13 +165,9 @@ var FilterConsumerBridgeToSqlRequest = /** @class */ (function () {
|
|
|
191
165
|
this.promises.push((function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
192
166
|
var x;
|
|
193
167
|
return tslib_1.__generator(this, function (_a) {
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
x = (_a.sent()) + ' ' + operator + ' ' + this.r.addParameterAndReturnSqlToken(col.valueConverter.toDb(val));
|
|
198
|
-
this.addToWhere(x);
|
|
199
|
-
return [2 /*return*/];
|
|
200
|
-
}
|
|
168
|
+
x = this.nameProvider.nameOf(col) + ' ' + operator + ' ' + this.r.addParameterAndReturnSqlToken(col.valueConverter.toDb(val));
|
|
169
|
+
this.addToWhere(x);
|
|
170
|
+
return [2 /*return*/];
|
|
201
171
|
});
|
|
202
172
|
}); })());
|
|
203
173
|
};
|
|
@@ -247,3 +217,63 @@ var CustomSqlFilterBuilder = /** @class */ (function () {
|
|
|
247
217
|
return CustomSqlFilterBuilder;
|
|
248
218
|
}());
|
|
249
219
|
exports.CustomSqlFilterBuilder = CustomSqlFilterBuilder;
|
|
220
|
+
function getDbNameProvider(meta) {
|
|
221
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
222
|
+
var result, _a, _b, f, _c, _d, _e, e_3_1, _f;
|
|
223
|
+
var e_3, _g;
|
|
224
|
+
return tslib_1.__generator(this, function (_h) {
|
|
225
|
+
switch (_h.label) {
|
|
226
|
+
case 0:
|
|
227
|
+
result = new dbNameProviderImpl();
|
|
228
|
+
_h.label = 1;
|
|
229
|
+
case 1:
|
|
230
|
+
_h.trys.push([1, 6, 7, 8]);
|
|
231
|
+
_a = tslib_1.__values(meta.fields), _b = _a.next();
|
|
232
|
+
_h.label = 2;
|
|
233
|
+
case 2:
|
|
234
|
+
if (!!_b.done) return [3 /*break*/, 5];
|
|
235
|
+
f = _b.value;
|
|
236
|
+
_d = (_c = result.map).set;
|
|
237
|
+
_e = [f.key];
|
|
238
|
+
return [4 /*yield*/, f.getDbName()];
|
|
239
|
+
case 3:
|
|
240
|
+
_d.apply(_c, _e.concat([_h.sent()]));
|
|
241
|
+
_h.label = 4;
|
|
242
|
+
case 4:
|
|
243
|
+
_b = _a.next();
|
|
244
|
+
return [3 /*break*/, 2];
|
|
245
|
+
case 5: return [3 /*break*/, 8];
|
|
246
|
+
case 6:
|
|
247
|
+
e_3_1 = _h.sent();
|
|
248
|
+
e_3 = { error: e_3_1 };
|
|
249
|
+
return [3 /*break*/, 8];
|
|
250
|
+
case 7:
|
|
251
|
+
try {
|
|
252
|
+
if (_b && !_b.done && (_g = _a.return)) _g.call(_a);
|
|
253
|
+
}
|
|
254
|
+
finally { if (e_3) throw e_3.error; }
|
|
255
|
+
return [7 /*endfinally*/];
|
|
256
|
+
case 8:
|
|
257
|
+
_f = result;
|
|
258
|
+
return [4 /*yield*/, meta.getDbName()];
|
|
259
|
+
case 9:
|
|
260
|
+
_f.entityName = _h.sent();
|
|
261
|
+
return [2 /*return*/, result];
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
exports.getDbNameProvider = getDbNameProvider;
|
|
267
|
+
var dbNameProviderImpl = /** @class */ (function () {
|
|
268
|
+
function dbNameProviderImpl() {
|
|
269
|
+
this.map = new Map();
|
|
270
|
+
}
|
|
271
|
+
dbNameProviderImpl.prototype.nameOf = function (field) {
|
|
272
|
+
return this.map.get(field.key);
|
|
273
|
+
};
|
|
274
|
+
dbNameProviderImpl.prototype.isDbReadonly = function (x) {
|
|
275
|
+
return (x.dbReadOnly || x.isServerExpression || this.nameOf(x) != x.options.dbName);
|
|
276
|
+
};
|
|
277
|
+
return dbNameProviderImpl;
|
|
278
|
+
}());
|
|
279
|
+
exports.dbNameProviderImpl = dbNameProviderImpl;
|
|
@@ -218,6 +218,10 @@ interface columnInfo {
|
|
|
218
218
|
key: string;
|
|
219
219
|
settings: (remult: Remult) => FieldOptions;
|
|
220
220
|
}
|
|
221
|
+
export declare type BuildEntityFields<entityType> = {
|
|
222
|
+
[Properties in keyof Partial<OmitEB<entityType>>]: any;
|
|
223
|
+
};
|
|
224
|
+
export declare function BuildEntity<entityType>(c: ClassType<entityType>, key: string, fields: BuildEntityFields<entityType>, ...options: (EntityOptions<entityType> | ((options: EntityOptions<entityType>, remult: Remult) => void))[]): void;
|
|
221
225
|
export declare function Entity<entityType>(key: string, ...options: (EntityOptions<entityType> | ((options: EntityOptions<entityType>, remult: Remult) => void))[]): (target: any) => any;
|
|
222
226
|
export declare class EntityBase {
|
|
223
227
|
get _(): EntityRef<this>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ControllerBase = exports.EntityBase = exports.Entity = 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.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;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var column_1 = require("../column");
|
|
6
6
|
var context_1 = require("../context");
|
|
@@ -2337,6 +2337,20 @@ function decorateColumnSettings(settings, remult) {
|
|
|
2337
2337
|
return settings;
|
|
2338
2338
|
}
|
|
2339
2339
|
exports.decorateColumnSettings = decorateColumnSettings;
|
|
2340
|
+
function BuildEntity(c, key, fields) {
|
|
2341
|
+
var options = [];
|
|
2342
|
+
for (var _i = 3; _i < arguments.length; _i++) {
|
|
2343
|
+
options[_i - 3] = arguments[_i];
|
|
2344
|
+
}
|
|
2345
|
+
Entity.apply(void 0, tslib_1.__spread([key], options))(c);
|
|
2346
|
+
for (var fieldKey in fields) {
|
|
2347
|
+
if (Object.prototype.hasOwnProperty.call(fields, fieldKey)) {
|
|
2348
|
+
var element = fields[fieldKey];
|
|
2349
|
+
element(c.prototype, fieldKey);
|
|
2350
|
+
}
|
|
2351
|
+
}
|
|
2352
|
+
}
|
|
2353
|
+
exports.BuildEntity = BuildEntity;
|
|
2340
2354
|
function Entity(key) {
|
|
2341
2355
|
var options = [];
|
|
2342
2356
|
for (var _i = 1; _i < arguments.length; _i++) {
|
|
@@ -1198,11 +1198,11 @@ db_tests_setup_1.testAll("Paging", function (_a) {
|
|
|
1198
1198
|
case 1:
|
|
1199
1199
|
s = _d.sent();
|
|
1200
1200
|
_b = expect;
|
|
1201
|
-
return [4 /*yield*/, s.find({ limit: 3 })];
|
|
1201
|
+
return [4 /*yield*/, s.find({ limit: 3, orderBy: { myId: "asc" } })];
|
|
1202
1202
|
case 2:
|
|
1203
1203
|
_b.apply(void 0, [(_d.sent()).length]).toBe(3);
|
|
1204
1204
|
_c = expect;
|
|
1205
|
-
return [4 /*yield*/, s.find({ limit: 3, page: 2 })];
|
|
1205
|
+
return [4 /*yield*/, s.find({ limit: 3, orderBy: { myId: "asc" }, page: 2 })];
|
|
1206
1206
|
case 3:
|
|
1207
1207
|
_c.apply(void 0, [(_d.sent()).length]).toBe(1);
|
|
1208
1208
|
return [2 /*return*/];
|
|
@@ -1210,6 +1210,67 @@ db_tests_setup_1.testAll("Paging", function (_a) {
|
|
|
1210
1210
|
});
|
|
1211
1211
|
});
|
|
1212
1212
|
}, false);
|
|
1213
|
+
db_tests_setup_1.testAll("filter", function (_a) {
|
|
1214
|
+
var createEntity = _a.createEntity;
|
|
1215
|
+
return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
1216
|
+
var s, _b;
|
|
1217
|
+
return tslib_1.__generator(this, function (_c) {
|
|
1218
|
+
switch (_c.label) {
|
|
1219
|
+
case 0: return [4 /*yield*/, createEntity(testFilter)];
|
|
1220
|
+
case 1:
|
|
1221
|
+
s = _c.sent();
|
|
1222
|
+
return [4 /*yield*/, s.insert({ id: 1, a: 'a', b: 'b', c: 'c' })];
|
|
1223
|
+
case 2:
|
|
1224
|
+
_c.sent();
|
|
1225
|
+
_b = expect;
|
|
1226
|
+
return [4 /*yield*/, s.count({
|
|
1227
|
+
a: 'z',
|
|
1228
|
+
$and: [testFilter.search('')]
|
|
1229
|
+
})];
|
|
1230
|
+
case 3:
|
|
1231
|
+
_b.apply(void 0, [_c.sent()]).toBe(0);
|
|
1232
|
+
return [2 /*return*/];
|
|
1233
|
+
}
|
|
1234
|
+
});
|
|
1235
|
+
});
|
|
1236
|
+
}, false);
|
|
1237
|
+
var testFilter = /** @class */ (function () {
|
|
1238
|
+
function testFilter() {
|
|
1239
|
+
this.id = 0;
|
|
1240
|
+
this.a = '';
|
|
1241
|
+
this.b = '';
|
|
1242
|
+
this.c = '';
|
|
1243
|
+
}
|
|
1244
|
+
testFilter.search = filter_interfaces_1.Filter.createCustom(function (remult, str) { return ({
|
|
1245
|
+
$and: [{
|
|
1246
|
+
$or: [
|
|
1247
|
+
{ a: 'a' },
|
|
1248
|
+
{ b: 'a' },
|
|
1249
|
+
{ c: 'a' }
|
|
1250
|
+
]
|
|
1251
|
+
}]
|
|
1252
|
+
}); });
|
|
1253
|
+
tslib_1.__decorate([
|
|
1254
|
+
remult3_1.Field(),
|
|
1255
|
+
tslib_1.__metadata("design:type", Number)
|
|
1256
|
+
], testFilter.prototype, "id", void 0);
|
|
1257
|
+
tslib_1.__decorate([
|
|
1258
|
+
remult3_1.Field(),
|
|
1259
|
+
tslib_1.__metadata("design:type", String)
|
|
1260
|
+
], testFilter.prototype, "a", void 0);
|
|
1261
|
+
tslib_1.__decorate([
|
|
1262
|
+
remult3_1.Field(),
|
|
1263
|
+
tslib_1.__metadata("design:type", String)
|
|
1264
|
+
], testFilter.prototype, "b", void 0);
|
|
1265
|
+
tslib_1.__decorate([
|
|
1266
|
+
remult3_1.Field(),
|
|
1267
|
+
tslib_1.__metadata("design:type", String)
|
|
1268
|
+
], testFilter.prototype, "c", void 0);
|
|
1269
|
+
testFilter = tslib_1.__decorate([
|
|
1270
|
+
remult3_1.Entity("testfilter", { allowApiCrud: true })
|
|
1271
|
+
], testFilter);
|
|
1272
|
+
return testFilter;
|
|
1273
|
+
}());
|
|
1213
1274
|
var testStringWithNull = /** @class */ (function (_super) {
|
|
1214
1275
|
tslib_1.__extends(testStringWithNull, _super);
|
|
1215
1276
|
function testStringWithNull() {
|
|
@@ -18,9 +18,10 @@ describe("custom id column", function () {
|
|
|
18
18
|
}
|
|
19
19
|
return class_1;
|
|
20
20
|
}(remult3_1.EntityBase));
|
|
21
|
-
remult3_1.
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
remult3_1.BuildEntity(type, 'custom', {
|
|
22
|
+
a: remult3_1.Field(),
|
|
23
|
+
b: remult3_1.Field()
|
|
24
|
+
}, { allowApiCrud: true });
|
|
24
25
|
return [4 /*yield*/, createEntity(type)];
|
|
25
26
|
case 1:
|
|
26
27
|
c = _b.sent();
|
|
@@ -6,6 +6,7 @@ var sql_database_1 = require("../data-providers/sql-database");
|
|
|
6
6
|
var remult3_1 = require("../remult3");
|
|
7
7
|
var filter_interfaces_1 = require("../filter/filter-interfaces");
|
|
8
8
|
var array_entity_data_provider_1 = require("../data-providers/array-entity-data-provider");
|
|
9
|
+
var filter_consumer_bridge_to_sql_request_1 = require("../filter/filter-consumer-bridge-to-sql-request");
|
|
9
10
|
var entityForCustomFilter = /** @class */ (function (_super) {
|
|
10
11
|
tslib_1.__extends(entityForCustomFilter, _super);
|
|
11
12
|
function entityForCustomFilter() {
|
|
@@ -14,30 +15,31 @@ var entityForCustomFilter = /** @class */ (function (_super) {
|
|
|
14
15
|
entityForCustomFilter_1 = entityForCustomFilter;
|
|
15
16
|
var entityForCustomFilter_1;
|
|
16
17
|
entityForCustomFilter.filter = filter_interfaces_1.Filter.createCustom(function (remult, c) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
17
|
-
var r, e_1;
|
|
18
|
+
var r, meta_1, e_1;
|
|
18
19
|
return tslib_1.__generator(this, function (_a) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
20
|
+
switch (_a.label) {
|
|
21
|
+
case 0:
|
|
22
|
+
r = [];
|
|
23
|
+
if (c.oneAndThree)
|
|
24
|
+
r.push({ id: [1, 3] });
|
|
25
|
+
if (c.two)
|
|
26
|
+
r.push({ id: 2 });
|
|
27
|
+
if (!c.dbOneOrThree) return [3 /*break*/, 2];
|
|
28
|
+
meta_1 = remult.repo(entityForCustomFilter_1).metadata;
|
|
29
|
+
return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.getDbNameProvider(meta_1)];
|
|
30
|
+
case 1:
|
|
31
|
+
e_1 = _a.sent();
|
|
32
|
+
r.push({
|
|
33
|
+
$and: [
|
|
34
|
+
sql_database_1.SqlDatabase.customFilter(function (x) { return tslib_1.__awaiter(void 0, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
|
|
35
|
+
return [2 /*return*/, x.sql = e_1.nameOf(meta_1.fields.id) + ' in (' + x.addParameterAndReturnSqlToken(1) + "," + x.addParameterAndReturnSqlToken(3) + ")"];
|
|
36
|
+
}); }); }),
|
|
37
|
+
array_entity_data_provider_1.ArrayEntityDataProvider.customFilter(function (x) { return x.id == 1 || x.id == 3; })
|
|
38
|
+
]
|
|
39
|
+
});
|
|
40
|
+
_a.label = 2;
|
|
41
|
+
case 2: return [2 /*return*/, { $and: r }];
|
|
39
42
|
}
|
|
40
|
-
return [2 /*return*/, { $and: r }];
|
|
41
43
|
});
|
|
42
44
|
}); });
|
|
43
45
|
entityForCustomFilter.oneAndThree = filter_interfaces_1.Filter.createCustom(function () { return ({ id: [1, 3] }); });
|
package/valueConverters.js
CHANGED
|
@@ -42,7 +42,7 @@ exports.DateOnlyValueConverter = {
|
|
|
42
42
|
toInput: function (x) { return exports.DateOnlyValueConverter.toJson(x); },
|
|
43
43
|
toJson: function (val) {
|
|
44
44
|
var d = val;
|
|
45
|
-
if (typeof d === "string")
|
|
45
|
+
if (typeof d === "string" || typeof (d) === "number")
|
|
46
46
|
d = new Date(d);
|
|
47
47
|
if (!d || d == null)
|
|
48
48
|
return null;
|