remult 0.23.4 → 0.23.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/package.json +3 -0
- package/esm/remult-nuxt.js +49 -0
- package/esm/src/data-api.d.ts +1 -0
- package/esm/src/data-api.js +15 -1
- package/esm/src/filter/filter-interfaces.d.ts +1 -1
- package/esm/src/filter/filter-interfaces.js +13 -2
- package/esm/src/remult3/RepositoryImplementation.js +36 -17
- package/esm/src/remult3/remult3.js +3 -2
- package/package.json +1 -1
- package/remult-nuxt.d.ts +6 -0
- package/remult-nuxt.js +74 -0
- package/src/data-api.d.ts +1 -0
- package/src/data-api.js +31 -6
- package/src/filter/filter-interfaces.d.ts +1 -1
- package/src/filter/filter-interfaces.js +13 -2
- package/src/remult3/RepositoryImplementation.js +45 -18
- package/src/remult3/remult3.js +3 -2
package/esm/package.json
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { readBody } from 'h3';
|
|
2
|
+
import { createRemultServer, } from './server/index.js';
|
|
3
|
+
export function remultNuxt(options) {
|
|
4
|
+
const result = createRemultServer(options, {
|
|
5
|
+
buildGenericRequestInfo: (event) => {
|
|
6
|
+
return {
|
|
7
|
+
method: event.node.req.method,
|
|
8
|
+
url: event.node.req.url,
|
|
9
|
+
on: (a, b) => event.node.req.on('close', () => {
|
|
10
|
+
b();
|
|
11
|
+
}),
|
|
12
|
+
};
|
|
13
|
+
},
|
|
14
|
+
getRequestBody: async (event) => await readBody(event),
|
|
15
|
+
});
|
|
16
|
+
const handler = async (event) => {
|
|
17
|
+
let sse = false;
|
|
18
|
+
const response = {
|
|
19
|
+
end: () => { },
|
|
20
|
+
json: () => { },
|
|
21
|
+
status: () => {
|
|
22
|
+
return response;
|
|
23
|
+
},
|
|
24
|
+
write: (what) => {
|
|
25
|
+
event.node.res.write(what);
|
|
26
|
+
},
|
|
27
|
+
writeHead: (status, headers) => {
|
|
28
|
+
sse = true;
|
|
29
|
+
event.node.res.writeHead(status, headers);
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
const r = await result.handle(event, response);
|
|
33
|
+
if (sse) {
|
|
34
|
+
await new Promise((resolve) => {
|
|
35
|
+
event.node.req.on('close', () => resolve({}));
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
if (r) {
|
|
39
|
+
return r.data;
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
return Object.assign(handler, {
|
|
43
|
+
getRemult: (req) => result.getRemult(req),
|
|
44
|
+
openApiDoc: (options) => result.openApiDoc(options),
|
|
45
|
+
withRemult(event, what) {
|
|
46
|
+
return result.withRemultAsync(event, what);
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
}
|
package/esm/src/data-api.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ export declare class DataApi<T = any> {
|
|
|
14
14
|
r: any[];
|
|
15
15
|
findOptions: FindOptions<T>;
|
|
16
16
|
}>;
|
|
17
|
+
private includeNone;
|
|
17
18
|
getArray(response: DataApiResponse, request: DataApiRequest, filterBody?: any): Promise<void>;
|
|
18
19
|
liveQuery(response: DataApiResponse, request: DataApiRequest, filterBody: any, serializeContext: () => Promise<any>, queryChannel: string): Promise<void>;
|
|
19
20
|
private buildWhere;
|
package/esm/src/data-api.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getRelationInfo } from '../internals';
|
|
1
2
|
import { doTransaction } from './context';
|
|
2
3
|
import { findOptionsToJson, liveQueryAction, } from './data-providers/rest-data-provider';
|
|
3
4
|
import { Filter, buildFilterFromRequestParameters, customUrlToken, } from './filter/filter-interfaces';
|
|
@@ -60,7 +61,10 @@ export class DataApi {
|
|
|
60
61
|
}
|
|
61
62
|
}
|
|
62
63
|
async getArrayImpl(response, request, filterBody) {
|
|
63
|
-
let findOptions = {
|
|
64
|
+
let findOptions = {
|
|
65
|
+
load: () => [],
|
|
66
|
+
include: this.includeNone(),
|
|
67
|
+
};
|
|
64
68
|
findOptions.where = await this.buildWhere(request, filterBody);
|
|
65
69
|
if (request) {
|
|
66
70
|
let sort = request.get('_sort');
|
|
@@ -111,6 +115,15 @@ export class DataApi {
|
|
|
111
115
|
});
|
|
112
116
|
return { r, findOptions };
|
|
113
117
|
}
|
|
118
|
+
includeNone() {
|
|
119
|
+
let include = {};
|
|
120
|
+
for (const field of this.repository.metadata.fields) {
|
|
121
|
+
if (getRelationInfo(field.options)) {
|
|
122
|
+
include[field.key] = false;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return include;
|
|
126
|
+
}
|
|
114
127
|
async getArray(response, request, filterBody) {
|
|
115
128
|
if (!this.repository.metadata.apiReadAllowed) {
|
|
116
129
|
response.forbidden();
|
|
@@ -191,6 +204,7 @@ export class DataApi {
|
|
|
191
204
|
await this.repository
|
|
192
205
|
.find({
|
|
193
206
|
where: { $and: where },
|
|
207
|
+
include: this.includeNone(),
|
|
194
208
|
})
|
|
195
209
|
.then(async (r) => {
|
|
196
210
|
if (r.length == 0)
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Remult } from '../context';
|
|
1
2
|
import { getEntityRef, getEntitySettings } from '../remult3/getEntityRef';
|
|
2
3
|
import { getRelationInfo } from '../remult3/relationInfoMember';
|
|
3
4
|
export class Filter {
|
|
@@ -57,7 +58,7 @@ export class Filter {
|
|
|
57
58
|
: new filterHelper(field);
|
|
58
59
|
let found = false;
|
|
59
60
|
if (fieldToFilter !== undefined && fieldToFilter != null) {
|
|
60
|
-
if (fieldToFilter.$id)
|
|
61
|
+
if (fieldToFilter.$id !== undefined)
|
|
61
62
|
fieldToFilter = fieldToFilter.$id;
|
|
62
63
|
for (const key in fieldToFilter) {
|
|
63
64
|
if (Object.prototype.hasOwnProperty.call(fieldToFilter, key)) {
|
|
@@ -164,8 +165,18 @@ class filterHelper {
|
|
|
164
165
|
processVal(val) {
|
|
165
166
|
let ei = getEntitySettings(this.metadata.valueType, false);
|
|
166
167
|
if (ei) {
|
|
167
|
-
if (!val)
|
|
168
|
+
if (!val) {
|
|
169
|
+
if (val === null && !this.metadata.allowNull) {
|
|
170
|
+
const rel = getRelationInfo(this.metadata.options);
|
|
171
|
+
if (rel?.type === 'reference')
|
|
172
|
+
if (new Remult().repo(rel.toType()).metadata.idMetadata.field.options
|
|
173
|
+
.valueType === Number)
|
|
174
|
+
return 0;
|
|
175
|
+
else
|
|
176
|
+
return '';
|
|
177
|
+
}
|
|
168
178
|
return null;
|
|
179
|
+
}
|
|
169
180
|
if (typeof val === 'string' || typeof val === 'number')
|
|
170
181
|
return val;
|
|
171
182
|
return getEntityRef(val).getId();
|
|
@@ -176,11 +176,21 @@ export class RepositoryImplementation {
|
|
|
176
176
|
return x;
|
|
177
177
|
}
|
|
178
178
|
async delete(item) {
|
|
179
|
+
const ref = getEntityRef(item, false);
|
|
180
|
+
if (ref)
|
|
181
|
+
return ref.delete();
|
|
179
182
|
if (typeof item === 'string' || typeof item === 'number')
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
183
|
+
if (this.dataProvider.isProxy)
|
|
184
|
+
return this.edp.delete(item);
|
|
185
|
+
else {
|
|
186
|
+
let ref2 = await this.findId(item);
|
|
187
|
+
if (ref2)
|
|
188
|
+
return await getEntityRef(ref2).delete();
|
|
189
|
+
}
|
|
190
|
+
let ref2 = this.getRefForExistingRow(item, undefined);
|
|
191
|
+
if (!this.dataProvider.isProxy)
|
|
192
|
+
await ref2.reload();
|
|
193
|
+
return ref2.delete();
|
|
184
194
|
}
|
|
185
195
|
async insert(entity) {
|
|
186
196
|
if (Array.isArray(entity)) {
|
|
@@ -1015,20 +1025,24 @@ class rowHelperBase {
|
|
|
1015
1025
|
val = lu.id;
|
|
1016
1026
|
else
|
|
1017
1027
|
val = this.instance[col.key];
|
|
1018
|
-
if (rel &&
|
|
1028
|
+
if (rel &&
|
|
1029
|
+
isNew &&
|
|
1030
|
+
!col.allowNull &&
|
|
1031
|
+
(val === undefined || val === null)) {
|
|
1019
1032
|
if (this.remult.repo(rel.toType()).metadata.idMetadata.field.valueType ===
|
|
1020
1033
|
Number)
|
|
1021
1034
|
val = 0;
|
|
1022
1035
|
else
|
|
1023
1036
|
val = '';
|
|
1024
1037
|
}
|
|
1025
|
-
if (
|
|
1026
|
-
val
|
|
1027
|
-
|
|
1028
|
-
val
|
|
1029
|
-
|
|
1030
|
-
|
|
1038
|
+
if (!rel || rel.type === 'reference') {
|
|
1039
|
+
if (val !== undefined) {
|
|
1040
|
+
val = col.valueConverter.toJson(val);
|
|
1041
|
+
if (val !== undefined && val !== null)
|
|
1042
|
+
val = col.valueConverter.fromJson(JSON.parse(JSON.stringify(val)));
|
|
1043
|
+
}
|
|
1031
1044
|
d[col.key] = val;
|
|
1045
|
+
}
|
|
1032
1046
|
}
|
|
1033
1047
|
return d;
|
|
1034
1048
|
}
|
|
@@ -1075,12 +1089,17 @@ class rowHelperBase {
|
|
|
1075
1089
|
else
|
|
1076
1090
|
val = lu.id;
|
|
1077
1091
|
else {
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1092
|
+
if (getRelationInfo(col) && !includeRelatedEntities) {
|
|
1093
|
+
disable = true;
|
|
1094
|
+
}
|
|
1095
|
+
else {
|
|
1096
|
+
val = this.instance[col.key];
|
|
1097
|
+
if (!this.remult) {
|
|
1098
|
+
if (val) {
|
|
1099
|
+
let eo = getEntitySettings(val.constructor, false);
|
|
1100
|
+
if (eo) {
|
|
1101
|
+
val = getEntityRef(val).getId();
|
|
1102
|
+
}
|
|
1084
1103
|
}
|
|
1085
1104
|
}
|
|
1086
1105
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//p1 -
|
|
2
|
+
//p1 - issue with relation that is allow null false, without a value - we set it to 0, but I couldn't filter on it using null! or using $id:0
|
|
3
|
+
//p1 - in tree like shape, got an error of circular json reference with parent folder and child folders
|
|
3
4
|
//p1 - sql-expression for knex
|
|
4
5
|
//p1 - postgres case sensitive
|
|
5
6
|
//p1 - filterToRaw should get a dbnames of - and we should create a dbnames of that supports an alias
|
|
@@ -18,7 +19,7 @@ request optional - and depends on that run `getUser` & `initRequest`
|
|
|
18
19
|
//p1 - add schema option to create postgres data provider
|
|
19
20
|
//p1 - find one i had a question about find first's different syntax from find that confused a user
|
|
20
21
|
//p1 - I think there should be a way to throw a forbidden exception
|
|
21
|
-
//
|
|
22
|
+
//p1 - Write some ctrl g
|
|
22
23
|
//y1 - get backend methods to work when specifying types for date, and entities as poco's
|
|
23
24
|
//y1 - required
|
|
24
25
|
//y1 - reconsider validators
|
package/package.json
CHANGED
package/remult-nuxt.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { H3Event } from 'h3';
|
|
2
|
+
import { RemultServerCore, RemultServerOptions, RemultServer } from './server/index.js';
|
|
3
|
+
export declare function remultNuxt(options: RemultServerOptions<H3Event>): RemultNuxtServer;
|
|
4
|
+
export type RemultNuxtServer = RemultServerCore<H3Event> & ((event: H3Event) => Promise<any>) & {
|
|
5
|
+
withRemult: RemultServer<H3Event>['withRemultAsync'];
|
|
6
|
+
};
|
package/remult-nuxt.js
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.remultNuxt = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var h3_1 = require("h3");
|
|
6
|
+
var index_js_1 = require("./server/index.js");
|
|
7
|
+
function remultNuxt(options) {
|
|
8
|
+
var _this = this;
|
|
9
|
+
var result = (0, index_js_1.createRemultServer)(options, {
|
|
10
|
+
buildGenericRequestInfo: function (event) {
|
|
11
|
+
return {
|
|
12
|
+
method: event.node.req.method,
|
|
13
|
+
url: event.node.req.url,
|
|
14
|
+
on: function (a, b) {
|
|
15
|
+
return event.node.req.on('close', function () {
|
|
16
|
+
b();
|
|
17
|
+
});
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
},
|
|
21
|
+
getRequestBody: function (event) { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
|
|
22
|
+
switch (_a.label) {
|
|
23
|
+
case 0: return [4 /*yield*/, (0, h3_1.readBody)(event)];
|
|
24
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
25
|
+
}
|
|
26
|
+
}); }); },
|
|
27
|
+
});
|
|
28
|
+
var handler = function (event) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
29
|
+
var sse, response, r;
|
|
30
|
+
return tslib_1.__generator(this, function (_a) {
|
|
31
|
+
switch (_a.label) {
|
|
32
|
+
case 0:
|
|
33
|
+
sse = false;
|
|
34
|
+
response = {
|
|
35
|
+
end: function () { },
|
|
36
|
+
json: function () { },
|
|
37
|
+
status: function () {
|
|
38
|
+
return response;
|
|
39
|
+
},
|
|
40
|
+
write: function (what) {
|
|
41
|
+
event.node.res.write(what);
|
|
42
|
+
},
|
|
43
|
+
writeHead: function (status, headers) {
|
|
44
|
+
sse = true;
|
|
45
|
+
event.node.res.writeHead(status, headers);
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
return [4 /*yield*/, result.handle(event, response)];
|
|
49
|
+
case 1:
|
|
50
|
+
r = _a.sent();
|
|
51
|
+
if (!sse) return [3 /*break*/, 3];
|
|
52
|
+
return [4 /*yield*/, new Promise(function (resolve) {
|
|
53
|
+
event.node.req.on('close', function () { return resolve({}); });
|
|
54
|
+
})];
|
|
55
|
+
case 2:
|
|
56
|
+
_a.sent();
|
|
57
|
+
_a.label = 3;
|
|
58
|
+
case 3:
|
|
59
|
+
if (r) {
|
|
60
|
+
return [2 /*return*/, r.data];
|
|
61
|
+
}
|
|
62
|
+
return [2 /*return*/];
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}); };
|
|
66
|
+
return Object.assign(handler, {
|
|
67
|
+
getRemult: function (req) { return result.getRemult(req); },
|
|
68
|
+
openApiDoc: function (options) { return result.openApiDoc(options); },
|
|
69
|
+
withRemult: function (event, what) {
|
|
70
|
+
return result.withRemultAsync(event, what);
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
exports.remultNuxt = remultNuxt;
|
package/src/data-api.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ export declare class DataApi<T = any> {
|
|
|
14
14
|
r: any[];
|
|
15
15
|
findOptions: FindOptions<T>;
|
|
16
16
|
}>;
|
|
17
|
+
private includeNone;
|
|
17
18
|
getArray(response: DataApiResponse, request: DataApiRequest, filterBody?: any): Promise<void>;
|
|
18
19
|
liveQuery(response: DataApiResponse, request: DataApiRequest, filterBody: any, serializeContext: () => Promise<any>, queryChannel: string): Promise<void>;
|
|
19
20
|
private buildWhere;
|
package/src/data-api.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.serializeError = exports.determineSort = exports.DataApi = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
|
+
var internals_1 = require("../internals");
|
|
5
6
|
var context_1 = require("./context");
|
|
6
7
|
var rest_data_provider_1 = require("./data-providers/rest-data-provider");
|
|
7
8
|
var filter_interfaces_1 = require("./filter/filter-interfaces");
|
|
@@ -109,7 +110,10 @@ var DataApi = /** @class */ (function () {
|
|
|
109
110
|
return tslib_1.__generator(this, function (_b) {
|
|
110
111
|
switch (_b.label) {
|
|
111
112
|
case 0:
|
|
112
|
-
findOptions = {
|
|
113
|
+
findOptions = {
|
|
114
|
+
load: function () { return []; },
|
|
115
|
+
include: this.includeNone(),
|
|
116
|
+
};
|
|
113
117
|
_a = findOptions;
|
|
114
118
|
return [4 /*yield*/, this.buildWhere(request, filterBody)];
|
|
115
119
|
case 1:
|
|
@@ -178,6 +182,26 @@ var DataApi = /** @class */ (function () {
|
|
|
178
182
|
});
|
|
179
183
|
});
|
|
180
184
|
};
|
|
185
|
+
DataApi.prototype.includeNone = function () {
|
|
186
|
+
var e_1, _a;
|
|
187
|
+
var include = {};
|
|
188
|
+
try {
|
|
189
|
+
for (var _b = tslib_1.__values(this.repository.metadata.fields), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
190
|
+
var field = _c.value;
|
|
191
|
+
if ((0, internals_1.getRelationInfo)(field.options)) {
|
|
192
|
+
include[field.key] = false;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
197
|
+
finally {
|
|
198
|
+
try {
|
|
199
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
200
|
+
}
|
|
201
|
+
finally { if (e_1) throw e_1.error; }
|
|
202
|
+
}
|
|
203
|
+
return include;
|
|
204
|
+
};
|
|
181
205
|
DataApi.prototype.getArray = function (response, request, filterBody) {
|
|
182
206
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
183
207
|
var r, err_2;
|
|
@@ -315,6 +339,7 @@ var DataApi = /** @class */ (function () {
|
|
|
315
339
|
case 3: return [4 /*yield*/, this.repository
|
|
316
340
|
.find({
|
|
317
341
|
where: { $and: where },
|
|
342
|
+
include: this.includeNone(),
|
|
318
343
|
})
|
|
319
344
|
.then(function (r) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
320
345
|
return tslib_1.__generator(this, function (_a) {
|
|
@@ -438,8 +463,8 @@ var DataApi = /** @class */ (function () {
|
|
|
438
463
|
if (!Array.isArray(body)) return [3 /*break*/, 2];
|
|
439
464
|
result_1 = [];
|
|
440
465
|
return [4 /*yield*/, (0, context_1.doTransaction)(this.remult, function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
441
|
-
var body_1, body_1_1, item, _a, _b,
|
|
442
|
-
var
|
|
466
|
+
var body_1, body_1_1, item, _a, _b, e_2_1;
|
|
467
|
+
var e_2, _c;
|
|
443
468
|
return tslib_1.__generator(this, function (_d) {
|
|
444
469
|
switch (_d.label) {
|
|
445
470
|
case 0:
|
|
@@ -459,14 +484,14 @@ var DataApi = /** @class */ (function () {
|
|
|
459
484
|
return [3 /*break*/, 1];
|
|
460
485
|
case 4: return [3 /*break*/, 7];
|
|
461
486
|
case 5:
|
|
462
|
-
|
|
463
|
-
|
|
487
|
+
e_2_1 = _d.sent();
|
|
488
|
+
e_2 = { error: e_2_1 };
|
|
464
489
|
return [3 /*break*/, 7];
|
|
465
490
|
case 6:
|
|
466
491
|
try {
|
|
467
492
|
if (body_1_1 && !body_1_1.done && (_c = body_1.return)) _c.call(body_1);
|
|
468
493
|
}
|
|
469
|
-
finally { if (
|
|
494
|
+
finally { if (e_2) throw e_2.error; }
|
|
470
495
|
return [7 /*endfinally*/];
|
|
471
496
|
case 7: return [2 /*return*/];
|
|
472
497
|
}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.__updateEntityBasedOnWhere = exports.buildFilterFromRequestParameters = exports.entityFilterToJson = exports.FilterSerializer = exports.customDatabaseFilterToken = exports.customUrlToken = exports.OrFilter = exports.AndFilter = exports.Filter = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
|
+
var context_1 = require("../context");
|
|
5
6
|
var getEntityRef_1 = require("../remult3/getEntityRef");
|
|
6
7
|
var relationInfoMember_1 = require("../remult3/relationInfoMember");
|
|
7
8
|
var Filter = /** @class */ (function () {
|
|
@@ -70,7 +71,7 @@ var Filter = /** @class */ (function () {
|
|
|
70
71
|
: new filterHelper(field);
|
|
71
72
|
var found = false;
|
|
72
73
|
if (fieldToFilter_1 !== undefined && fieldToFilter_1 != null) {
|
|
73
|
-
if (fieldToFilter_1.$id)
|
|
74
|
+
if (fieldToFilter_1.$id !== undefined)
|
|
74
75
|
fieldToFilter_1 = fieldToFilter_1.$id;
|
|
75
76
|
for (var key_1 in fieldToFilter_1) {
|
|
76
77
|
if (Object.prototype.hasOwnProperty.call(fieldToFilter_1, key_1)) {
|
|
@@ -215,8 +216,18 @@ var filterHelper = /** @class */ (function () {
|
|
|
215
216
|
filterHelper.prototype.processVal = function (val) {
|
|
216
217
|
var ei = (0, getEntityRef_1.getEntitySettings)(this.metadata.valueType, false);
|
|
217
218
|
if (ei) {
|
|
218
|
-
if (!val)
|
|
219
|
+
if (!val) {
|
|
220
|
+
if (val === null && !this.metadata.allowNull) {
|
|
221
|
+
var rel = (0, relationInfoMember_1.getRelationInfo)(this.metadata.options);
|
|
222
|
+
if ((rel === null || rel === void 0 ? void 0 : rel.type) === 'reference')
|
|
223
|
+
if (new context_1.Remult().repo(rel.toType()).metadata.idMetadata.field.options
|
|
224
|
+
.valueType === Number)
|
|
225
|
+
return 0;
|
|
226
|
+
else
|
|
227
|
+
return '';
|
|
228
|
+
}
|
|
219
229
|
return null;
|
|
230
|
+
}
|
|
220
231
|
if (typeof val === 'string' || typeof val === 'number')
|
|
221
232
|
return val;
|
|
222
233
|
return (0, getEntityRef_1.getEntityRef)(val).getId();
|
|
@@ -233,13 +233,31 @@ var RepositoryImplementation = /** @class */ (function () {
|
|
|
233
233
|
};
|
|
234
234
|
RepositoryImplementation.prototype.delete = function (item) {
|
|
235
235
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
236
|
+
var ref, ref2_1, ref2;
|
|
236
237
|
return tslib_1.__generator(this, function (_a) {
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
238
|
+
switch (_a.label) {
|
|
239
|
+
case 0:
|
|
240
|
+
ref = (0, getEntityRef_1.getEntityRef)(item, false);
|
|
241
|
+
if (ref)
|
|
242
|
+
return [2 /*return*/, ref.delete()];
|
|
243
|
+
if (!(typeof item === 'string' || typeof item === 'number')) return [3 /*break*/, 4];
|
|
244
|
+
if (!this.dataProvider.isProxy) return [3 /*break*/, 1];
|
|
245
|
+
return [2 /*return*/, this.edp.delete(item)];
|
|
246
|
+
case 1: return [4 /*yield*/, this.findId(item)];
|
|
247
|
+
case 2:
|
|
248
|
+
ref2_1 = _a.sent();
|
|
249
|
+
if (!ref2_1) return [3 /*break*/, 4];
|
|
250
|
+
return [4 /*yield*/, (0, getEntityRef_1.getEntityRef)(ref2_1).delete()];
|
|
251
|
+
case 3: return [2 /*return*/, _a.sent()];
|
|
252
|
+
case 4:
|
|
253
|
+
ref2 = this.getRefForExistingRow(item, undefined);
|
|
254
|
+
if (!!this.dataProvider.isProxy) return [3 /*break*/, 6];
|
|
255
|
+
return [4 /*yield*/, ref2.reload()];
|
|
256
|
+
case 5:
|
|
257
|
+
_a.sent();
|
|
258
|
+
_a.label = 6;
|
|
259
|
+
case 6: return [2 /*return*/, ref2.delete()];
|
|
241
260
|
}
|
|
242
|
-
return [2 /*return*/];
|
|
243
261
|
});
|
|
244
262
|
});
|
|
245
263
|
};
|
|
@@ -1571,20 +1589,24 @@ var rowHelperBase = /** @class */ (function () {
|
|
|
1571
1589
|
val = lu.id;
|
|
1572
1590
|
else
|
|
1573
1591
|
val = this.instance[col.key];
|
|
1574
|
-
if (rel &&
|
|
1592
|
+
if (rel &&
|
|
1593
|
+
isNew &&
|
|
1594
|
+
!col.allowNull &&
|
|
1595
|
+
(val === undefined || val === null)) {
|
|
1575
1596
|
if (this.remult.repo(rel.toType()).metadata.idMetadata.field.valueType ===
|
|
1576
1597
|
Number)
|
|
1577
1598
|
val = 0;
|
|
1578
1599
|
else
|
|
1579
1600
|
val = '';
|
|
1580
1601
|
}
|
|
1581
|
-
if (
|
|
1582
|
-
val
|
|
1583
|
-
|
|
1584
|
-
val
|
|
1585
|
-
|
|
1586
|
-
|
|
1602
|
+
if (!rel || rel.type === 'reference') {
|
|
1603
|
+
if (val !== undefined) {
|
|
1604
|
+
val = col.valueConverter.toJson(val);
|
|
1605
|
+
if (val !== undefined && val !== null)
|
|
1606
|
+
val = col.valueConverter.fromJson(JSON.parse(JSON.stringify(val)));
|
|
1607
|
+
}
|
|
1587
1608
|
d[col.key] = val;
|
|
1609
|
+
}
|
|
1588
1610
|
}
|
|
1589
1611
|
}
|
|
1590
1612
|
catch (e_25_1) { e_25 = { error: e_25_1 }; }
|
|
@@ -1673,12 +1695,17 @@ var rowHelperBase = /** @class */ (function () {
|
|
|
1673
1695
|
else
|
|
1674
1696
|
val = lu.id;
|
|
1675
1697
|
else {
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
|
|
1680
|
-
|
|
1681
|
-
|
|
1698
|
+
if ((0, relationInfoMember_1.getRelationInfo)(col) && !includeRelatedEntities) {
|
|
1699
|
+
disable = true;
|
|
1700
|
+
}
|
|
1701
|
+
else {
|
|
1702
|
+
val = this.instance[col.key];
|
|
1703
|
+
if (!this.remult) {
|
|
1704
|
+
if (val) {
|
|
1705
|
+
var eo = (0, getEntityRef_1.getEntitySettings)(val.constructor, false);
|
|
1706
|
+
if (eo) {
|
|
1707
|
+
val = (0, getEntityRef_1.getEntityRef)(val).getId();
|
|
1708
|
+
}
|
|
1682
1709
|
}
|
|
1683
1710
|
}
|
|
1684
1711
|
}
|
package/src/remult3/remult3.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//p1 -
|
|
3
|
+
//p1 - issue with relation that is allow null false, without a value - we set it to 0, but I couldn't filter on it using null! or using $id:0
|
|
4
|
+
//p1 - in tree like shape, got an error of circular json reference with parent folder and child folders
|
|
4
5
|
//p1 - sql-expression for knex
|
|
5
6
|
//p1 - postgres case sensitive
|
|
6
7
|
//p1 - filterToRaw should get a dbnames of - and we should create a dbnames of that supports an alias
|
|
@@ -19,7 +20,7 @@ request optional - and depends on that run `getUser` & `initRequest`
|
|
|
19
20
|
//p1 - add schema option to create postgres data provider
|
|
20
21
|
//p1 - find one i had a question about find first's different syntax from find that confused a user
|
|
21
22
|
//p1 - I think there should be a way to throw a forbidden exception
|
|
22
|
-
//
|
|
23
|
+
//p1 - Write some ctrl g
|
|
23
24
|
//y1 - get backend methods to work when specifying types for date, and entities as poco's
|
|
24
25
|
//y1 - required
|
|
25
26
|
//y1 - reconsider validators
|