remult 0.14.6 → 0.14.7
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/assign.js +5 -1
- package/classType.js +2 -1
- package/graphql.js +146 -84
- package/index.js +73 -25
- package/inputTypes.js +16 -9
- package/package.json +1 -2
- package/postgres/index.js +4 -1
- package/postgres/postgres-data-provider.d.ts +4 -1
- package/postgres/postgres-data-provider.js +364 -165
- package/postgres/postgresColumnSyntax.d.ts +1 -1
- package/postgres/postgresColumnSyntax.js +8 -4
- package/remult-express.js +10 -6
- package/remult-knex/index.d.ts +5 -2
- package/remult-knex/index.js +720 -300
- package/remult-middleware.js +29 -24
- package/remult-mongo.js +406 -172
- package/server/JsonEntityFileStorage.js +15 -10
- package/server/expressBridge.d.ts +4 -2
- package/server/expressBridge.js +570 -383
- package/server/index.js +11 -4
- package/server/register-actions-on-server.js +38 -12
- package/server/register-entities-on-server.js +13 -9
- package/src/__EntityValueProvider.js +2 -1
- package/src/__RowsOfDataForTesting.js +2 -1
- package/src/backend-tests/backend-database-test-setup.backend-spec.js +190 -72
- package/src/backend-tests/my-test.backend-spec.js +114 -45
- package/src/column-interfaces.js +6 -2
- package/src/column.js +113 -71
- package/src/context.js +330 -174
- package/src/data-api.js +326 -162
- package/src/data-interfaces.js +11 -7
- package/src/data-providers/array-entity-data-provider.js +286 -171
- package/src/data-providers/in-memory-database.js +27 -12
- package/src/data-providers/json-data-provider.js +77 -41
- package/src/data-providers/rest-data-provider.js +189 -102
- package/src/data-providers/sql-database.js +403 -223
- package/src/data-providers/web-sql-data-provider.js +139 -78
- package/src/entity.js +2 -1
- package/src/filter/filter-consumer-bridge-to-sql-request.d.ts +1 -1
- package/src/filter/filter-consumer-bridge-to-sql-request.js +248 -106
- package/src/filter/filter-consumer-bridge-to-url-builder.js +2 -1
- package/src/filter/filter-interfaces.js +440 -277
- package/src/id-entity.js +17 -8
- package/src/remult3/RepositoryImplementation.js +2367 -1191
- package/src/remult3/index.js +5 -2
- package/src/remult3/remult3.js +2 -1
- package/src/server-action.js +528 -294
- package/src/shared-tests/db-tests-setup.js +153 -49
- package/src/shared-tests/db-tests.db-tests.js +1566 -660
- package/src/shared-tests/deleteAll.js +20 -3
- package/src/shared-tests/entityWithValidations.js +79 -52
- package/src/shared-tests/index.js +6 -4
- package/src/shared-tests/test-custom-id-column.spec.js +85 -37
- package/src/shared-tests/test-special-value.spec.js +104 -64
- package/src/shared-tests/test-update-with-null.spec.js +49 -28
- package/src/sort.js +95 -38
- package/src/sql-command.js +2 -1
- package/src/tests/Done.js +13 -7
- package/src/tests/TestDataApiResponse.js +22 -15
- package/src/tests/c.js +27 -21
- package/src/tests/createData.js +48 -20
- package/src/tests/d.js +27 -19
- package/src/tests/dWithPrefilter.js +44 -31
- package/src/tests/entityForCustomFilter.js +66 -42
- package/src/tests/entityWithValidationsOnColumn.js +29 -21
- package/src/tests/frontend-database-tests-setup.spec.js +98 -35
- package/src/tests/h.js +44 -35
- package/src/tests/remult-3-entities.js +80 -71
- package/src/tests/tasks.js +29 -23
- package/src/tests/testHelper.spec.js +322 -170
- package/src/tests/testModel/models.js +33 -25
- package/src/validators.js +59 -32
- package/urlBuilder.js +14 -8
- package/valueConverters.js +160 -161
package/src/server-action.js
CHANGED
|
@@ -1,365 +1,599 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.classBackendMethodsArray = exports.prepareReceivedArgs = exports.prepareArgsToSend = exports.ProgressListener = exports.BackendMethod = exports.Controller = exports.serverActionField = exports.actionInfo = exports.myServerAction = exports.Action = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
require("reflect-metadata");
|
|
6
|
+
var context_1 = require("./context");
|
|
7
|
+
var sql_database_1 = require("./data-providers/sql-database");
|
|
8
|
+
var remult3_1 = require("./remult3");
|
|
9
|
+
var Action = /** @class */ (function () {
|
|
10
|
+
function Action(actionUrl, queue, allowed) {
|
|
7
11
|
this.actionUrl = actionUrl;
|
|
8
12
|
this.queue = queue;
|
|
9
13
|
this.allowed = allowed;
|
|
10
14
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
15
|
+
Action.prototype.run = function (pIn) {
|
|
16
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
17
|
+
var r, p, progress_1, runningJob_1;
|
|
18
|
+
var _this = this;
|
|
19
|
+
return tslib_1.__generator(this, function (_a) {
|
|
20
|
+
switch (_a.label) {
|
|
21
|
+
case 0: return [4 /*yield*/, Action.provider.post(context_1.Remult.apiBaseUrl + '/' + this.actionUrl, pIn)];
|
|
22
|
+
case 1:
|
|
23
|
+
r = _a.sent();
|
|
24
|
+
p = r;
|
|
25
|
+
if (!(p && p.queuedJobId)) return [3 /*break*/, 6];
|
|
26
|
+
progress_1 = exports.actionInfo.startBusyWithProgress();
|
|
27
|
+
_a.label = 2;
|
|
28
|
+
case 2:
|
|
29
|
+
_a.trys.push([2, , 4, 5]);
|
|
30
|
+
return [4 /*yield*/, exports.actionInfo.runActionWithoutBlockingUI(function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
31
|
+
return tslib_1.__generator(this, function (_a) {
|
|
32
|
+
switch (_a.label) {
|
|
33
|
+
case 0:
|
|
34
|
+
if (!(!runningJob_1 || !runningJob_1.done)) return [3 /*break*/, 4];
|
|
35
|
+
if (!runningJob_1) return [3 /*break*/, 2];
|
|
36
|
+
return [4 /*yield*/, new Promise(function (res) { return setTimeout(function () {
|
|
37
|
+
res(undefined);
|
|
38
|
+
}, 200); })];
|
|
39
|
+
case 1:
|
|
40
|
+
_a.sent();
|
|
41
|
+
_a.label = 2;
|
|
42
|
+
case 2: return [4 /*yield*/, Action.provider.post(context_1.Remult.apiBaseUrl + '/' + Action.apiUrlForJobStatus, { queuedJobId: r.queuedJobId })];
|
|
43
|
+
case 3:
|
|
44
|
+
runningJob_1 = _a.sent();
|
|
45
|
+
if (runningJob_1.progress) {
|
|
46
|
+
progress_1.progress(runningJob_1.progress);
|
|
47
|
+
}
|
|
48
|
+
return [3 /*break*/, 0];
|
|
49
|
+
case 4: return [2 /*return*/];
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}); })];
|
|
53
|
+
case 3:
|
|
54
|
+
_a.sent();
|
|
55
|
+
if (runningJob_1.error)
|
|
56
|
+
throw runningJob_1.error;
|
|
57
|
+
progress_1.progress(1);
|
|
58
|
+
return [2 /*return*/, runningJob_1.result];
|
|
59
|
+
case 4:
|
|
60
|
+
progress_1.close();
|
|
61
|
+
return [7 /*endfinally*/];
|
|
62
|
+
case 5: return [3 /*break*/, 7];
|
|
63
|
+
case 6: return [2 /*return*/, r];
|
|
64
|
+
case 7: return [2 /*return*/];
|
|
65
|
+
}
|
|
66
|
+
});
|
|
54
67
|
});
|
|
68
|
+
};
|
|
69
|
+
Action.prototype.__register = function (reg) {
|
|
70
|
+
var _this = this;
|
|
71
|
+
reg(this.actionUrl, this.queue, this.allowed, function (d, req, res) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
72
|
+
var r, err_1;
|
|
73
|
+
return tslib_1.__generator(this, function (_a) {
|
|
74
|
+
switch (_a.label) {
|
|
75
|
+
case 0:
|
|
76
|
+
_a.trys.push([0, 2, , 3]);
|
|
77
|
+
return [4 /*yield*/, this.execute(d, req, res)];
|
|
78
|
+
case 1:
|
|
79
|
+
r = _a.sent();
|
|
80
|
+
res.success(r);
|
|
81
|
+
return [3 /*break*/, 3];
|
|
82
|
+
case 2:
|
|
83
|
+
err_1 = _a.sent();
|
|
84
|
+
if (err_1 instanceof ForbiddenError)
|
|
85
|
+
res.forbidden();
|
|
86
|
+
else
|
|
87
|
+
res.error(err_1);
|
|
88
|
+
return [3 /*break*/, 3];
|
|
89
|
+
case 3: return [2 /*return*/];
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
}); });
|
|
93
|
+
};
|
|
94
|
+
Action.apiUrlForJobStatus = 'jobStatusInQueue';
|
|
95
|
+
return Action;
|
|
96
|
+
}());
|
|
97
|
+
exports.Action = Action;
|
|
98
|
+
var ForbiddenError = /** @class */ (function (_super) {
|
|
99
|
+
tslib_1.__extends(ForbiddenError, _super);
|
|
100
|
+
function ForbiddenError() {
|
|
101
|
+
return _super.call(this, "Forbidden") || this;
|
|
55
102
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
class
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
this.types = types;
|
|
67
|
-
this.options = options;
|
|
68
|
-
this.originalMethod = originalMethod;
|
|
103
|
+
return ForbiddenError;
|
|
104
|
+
}(Error));
|
|
105
|
+
var myServerAction = /** @class */ (function (_super) {
|
|
106
|
+
tslib_1.__extends(myServerAction, _super);
|
|
107
|
+
function myServerAction(name, types, options, originalMethod) {
|
|
108
|
+
var _this = _super.call(this, name, options.queue, options.allowed) || this;
|
|
109
|
+
_this.types = types;
|
|
110
|
+
_this.options = options;
|
|
111
|
+
_this.originalMethod = originalMethod;
|
|
112
|
+
return _this;
|
|
69
113
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
114
|
+
myServerAction.prototype.execute = function (info, remult, res) {
|
|
115
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
116
|
+
var result, ds;
|
|
117
|
+
var _this = this;
|
|
118
|
+
return tslib_1.__generator(this, function (_a) {
|
|
119
|
+
switch (_a.label) {
|
|
120
|
+
case 0:
|
|
121
|
+
result = { data: {} };
|
|
122
|
+
ds = remult._dataSource;
|
|
123
|
+
return [4 /*yield*/, ds.transaction(function (ds) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
124
|
+
var _a, _b, err_2;
|
|
125
|
+
return tslib_1.__generator(this, function (_c) {
|
|
126
|
+
switch (_c.label) {
|
|
127
|
+
case 0:
|
|
128
|
+
remult.setDataProvider(ds);
|
|
129
|
+
if (!remult.isAllowedForInstance(undefined, this.options.allowed))
|
|
130
|
+
throw new ForbiddenError();
|
|
131
|
+
_a = info;
|
|
132
|
+
return [4 /*yield*/, prepareReceivedArgs(this.types, info.args, remult, ds, res)];
|
|
133
|
+
case 1:
|
|
134
|
+
_a.args = _c.sent();
|
|
135
|
+
_c.label = 2;
|
|
136
|
+
case 2:
|
|
137
|
+
_c.trys.push([2, 4, , 5]);
|
|
138
|
+
_b = result;
|
|
139
|
+
return [4 /*yield*/, this.originalMethod(info.args)];
|
|
140
|
+
case 3:
|
|
141
|
+
_b.data = _c.sent();
|
|
142
|
+
return [3 /*break*/, 5];
|
|
143
|
+
case 4:
|
|
144
|
+
err_2 = _c.sent();
|
|
145
|
+
throw err_2;
|
|
146
|
+
case 5: return [2 /*return*/];
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
}); })];
|
|
150
|
+
case 1:
|
|
151
|
+
_a.sent();
|
|
152
|
+
return [2 /*return*/, result];
|
|
153
|
+
}
|
|
154
|
+
});
|
|
84
155
|
});
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
}
|
|
88
|
-
|
|
156
|
+
};
|
|
157
|
+
return myServerAction;
|
|
158
|
+
}(Action));
|
|
159
|
+
exports.myServerAction = myServerAction;
|
|
160
|
+
exports.actionInfo = {
|
|
89
161
|
allActions: [],
|
|
90
162
|
runningOnServer: false,
|
|
91
|
-
runActionWithoutBlockingUI: (what)
|
|
92
|
-
startBusyWithProgress: ()
|
|
93
|
-
progress: (percent)
|
|
94
|
-
close: ()
|
|
95
|
-
})
|
|
163
|
+
runActionWithoutBlockingUI: function (what) { return what(); },
|
|
164
|
+
startBusyWithProgress: function () { return ({
|
|
165
|
+
progress: function (percent) { },
|
|
166
|
+
close: function () { }
|
|
167
|
+
}); }
|
|
96
168
|
};
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
169
|
+
exports.serverActionField = Symbol('serverActionField');
|
|
170
|
+
var methodHelpers = new Map();
|
|
171
|
+
var classOptions = new Map();
|
|
172
|
+
function Controller(key) {
|
|
101
173
|
return function (target) {
|
|
102
|
-
|
|
103
|
-
classOptions.set(r, { key });
|
|
104
|
-
setControllerSettings(target, { key });
|
|
174
|
+
var r = target;
|
|
175
|
+
classOptions.set(r, { key: key });
|
|
176
|
+
context_1.setControllerSettings(target, { key: key });
|
|
105
177
|
return target;
|
|
106
178
|
};
|
|
107
179
|
}
|
|
180
|
+
exports.Controller = Controller;
|
|
108
181
|
/** Indicates that the decorated methods runs on the backend. See: [Backend Methods](https://remult.dev/docs/backendMethods.html) */
|
|
109
|
-
|
|
110
|
-
return (target, key, descriptor)
|
|
182
|
+
function BackendMethod(options) {
|
|
183
|
+
return function (target, key, descriptor) {
|
|
111
184
|
if (target.prototype !== undefined) {
|
|
112
185
|
var originalMethod = descriptor.value;
|
|
113
186
|
var types = Reflect.getMetadata("design:paramtypes", target, key);
|
|
114
187
|
// if types are undefined - you've forgot to set: "emitDecoratorMetadata":true
|
|
115
|
-
|
|
116
|
-
descriptor.value =
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
return await actionInfo.runActionWithoutBlockingUI(async () => (await serverAction.run({ args })).data);
|
|
121
|
-
}
|
|
122
|
-
else
|
|
123
|
-
return (await serverAction.run({ args })).data;
|
|
188
|
+
var serverAction_1 = new myServerAction(key, types, options, function (args) { return originalMethod.apply(undefined, args); });
|
|
189
|
+
descriptor.value = function () {
|
|
190
|
+
var args = [];
|
|
191
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
192
|
+
args[_i] = arguments[_i];
|
|
124
193
|
}
|
|
125
|
-
|
|
126
|
-
|
|
194
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
195
|
+
var _this = this;
|
|
196
|
+
return tslib_1.__generator(this, function (_a) {
|
|
197
|
+
switch (_a.label) {
|
|
198
|
+
case 0:
|
|
199
|
+
if (!!exports.actionInfo.runningOnServer) return [3 /*break*/, 5];
|
|
200
|
+
args = prepareArgsToSend(types, args);
|
|
201
|
+
if (!(options.blockUser === false)) return [3 /*break*/, 2];
|
|
202
|
+
return [4 /*yield*/, exports.actionInfo.runActionWithoutBlockingUI(function () { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
|
|
203
|
+
switch (_a.label) {
|
|
204
|
+
case 0: return [4 /*yield*/, serverAction_1.run({ args: args })];
|
|
205
|
+
case 1: return [2 /*return*/, (_a.sent()).data];
|
|
206
|
+
}
|
|
207
|
+
}); }); })];
|
|
208
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
209
|
+
case 2: return [4 /*yield*/, serverAction_1.run({ args: args })];
|
|
210
|
+
case 3: return [2 /*return*/, (_a.sent()).data];
|
|
211
|
+
case 4: return [3 /*break*/, 7];
|
|
212
|
+
case 5: return [4 /*yield*/, originalMethod.apply(undefined, args)];
|
|
213
|
+
case 6: return [2 /*return*/, (_a.sent())];
|
|
214
|
+
case 7: return [2 /*return*/];
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
});
|
|
127
218
|
};
|
|
128
219
|
registerAction(target, descriptor);
|
|
129
|
-
descriptor.value[serverActionField] =
|
|
220
|
+
descriptor.value[exports.serverActionField] = serverAction_1;
|
|
130
221
|
return descriptor;
|
|
131
222
|
}
|
|
132
223
|
var types = Reflect.getMetadata("design:paramtypes", target, key);
|
|
133
|
-
|
|
224
|
+
var x = context_1.classHelpers.get(target.constructor);
|
|
134
225
|
if (!x) {
|
|
135
|
-
x = new ClassHelper();
|
|
136
|
-
classHelpers.set(target.constructor, x);
|
|
226
|
+
x = new context_1.ClassHelper();
|
|
227
|
+
context_1.classHelpers.set(target.constructor, x);
|
|
137
228
|
}
|
|
138
|
-
|
|
229
|
+
var mh = new context_1.MethodHelper();
|
|
139
230
|
methodHelpers.set(descriptor, mh);
|
|
140
231
|
x.methods.push(mh);
|
|
141
232
|
var originalMethod = descriptor.value;
|
|
142
|
-
|
|
143
|
-
__register(reg) {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
233
|
+
var serverAction = {
|
|
234
|
+
__register: function (reg) {
|
|
235
|
+
var e_1, _a;
|
|
236
|
+
var _this = this;
|
|
237
|
+
var c = new context_1.Remult();
|
|
238
|
+
var _loop_1 = function (constructor) {
|
|
239
|
+
var controllerOptions = mh.classes.get(constructor);
|
|
147
240
|
if (!controllerOptions.key) {
|
|
148
241
|
controllerOptions.key = c.repo(constructor).metadata.key;
|
|
149
242
|
}
|
|
150
|
-
reg(controllerOptions.key + '/' + key, options ? options.queue : false, options.allowed,
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
243
|
+
reg(controllerOptions.key + '/' + key, options ? options.queue : false, options.allowed, function (d, req, res) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
244
|
+
var allowed, remult_1, ds, r_1, err_3;
|
|
245
|
+
var _this = this;
|
|
246
|
+
return tslib_1.__generator(this, function (_a) {
|
|
247
|
+
switch (_a.label) {
|
|
248
|
+
case 0:
|
|
249
|
+
d.args = d.args.map(function (x) { return isCustomUndefined(x) ? undefined : x; });
|
|
250
|
+
allowed = options.allowed;
|
|
251
|
+
_a.label = 1;
|
|
252
|
+
case 1:
|
|
253
|
+
_a.trys.push([1, 3, , 4]);
|
|
254
|
+
remult_1 = req;
|
|
255
|
+
ds = remult_1._dataSource;
|
|
256
|
+
return [4 /*yield*/, ds.transaction(function (ds) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
257
|
+
var _a, repo, y, rowHelper, rows, defs, err_4, y, controllerRef, err_5;
|
|
258
|
+
var _b, _c, _d;
|
|
259
|
+
return tslib_1.__generator(this, function (_e) {
|
|
260
|
+
switch (_e.label) {
|
|
261
|
+
case 0:
|
|
262
|
+
remult_1.setDataProvider(ds);
|
|
263
|
+
_a = d;
|
|
264
|
+
return [4 /*yield*/, prepareReceivedArgs(types, d.args, remult_1, ds, res)];
|
|
265
|
+
case 1:
|
|
266
|
+
_a.args = _e.sent();
|
|
267
|
+
if (!context_1.allEntities.includes(constructor)) return [3 /*break*/, 13];
|
|
268
|
+
repo = remult_1.repo(constructor);
|
|
269
|
+
y = void 0;
|
|
270
|
+
if (!d.rowInfo.isNewRow) return [3 /*break*/, 3];
|
|
271
|
+
y = repo.create();
|
|
272
|
+
rowHelper = repo.getEntityRef(y);
|
|
273
|
+
return [4 /*yield*/, rowHelper._updateEntityBasedOnApi(d.rowInfo.data)];
|
|
274
|
+
case 2:
|
|
275
|
+
_e.sent();
|
|
276
|
+
return [3 /*break*/, 6];
|
|
277
|
+
case 3: return [4 /*yield*/, repo.find({
|
|
278
|
+
where: tslib_1.__assign(tslib_1.__assign({}, repo.metadata.idMetadata.getIdFilter(d.rowInfo.id)), { $and: [repo.metadata.options.apiPrefilter] })
|
|
279
|
+
})];
|
|
280
|
+
case 4:
|
|
281
|
+
rows = _e.sent();
|
|
282
|
+
if (rows.length != 1)
|
|
283
|
+
throw new Error("not found or too many matches");
|
|
284
|
+
y = rows[0];
|
|
285
|
+
return [4 /*yield*/, repo.getEntityRef(y)._updateEntityBasedOnApi(d.rowInfo.data)];
|
|
286
|
+
case 5:
|
|
287
|
+
_e.sent();
|
|
288
|
+
_e.label = 6;
|
|
289
|
+
case 6:
|
|
290
|
+
if (!remult_1.isAllowedForInstance(y, allowed))
|
|
291
|
+
throw new ForbiddenError();
|
|
292
|
+
defs = remult3_1.getEntityRef(y);
|
|
293
|
+
return [4 /*yield*/, defs.__validateEntity()];
|
|
294
|
+
case 7:
|
|
295
|
+
_e.sent();
|
|
296
|
+
_e.label = 8;
|
|
297
|
+
case 8:
|
|
298
|
+
_e.trys.push([8, 11, , 12]);
|
|
299
|
+
_b = {};
|
|
300
|
+
return [4 /*yield*/, originalMethod.apply(y, d.args)];
|
|
301
|
+
case 9:
|
|
302
|
+
_b.result = _e.sent();
|
|
303
|
+
_c = {};
|
|
304
|
+
return [4 /*yield*/, defs.toApiJson()];
|
|
305
|
+
case 10:
|
|
306
|
+
r_1 = (_b.rowInfo = (_c.data = _e.sent(),
|
|
307
|
+
_c.isNewRow = defs.isNew(),
|
|
308
|
+
_c.wasChanged = defs.wasChanged(),
|
|
309
|
+
_c.id = defs.getOriginalId(),
|
|
310
|
+
_c),
|
|
311
|
+
_b);
|
|
312
|
+
return [3 /*break*/, 12];
|
|
313
|
+
case 11:
|
|
314
|
+
err_4 = _e.sent();
|
|
315
|
+
throw defs.catchSaveErrors(err_4);
|
|
316
|
+
case 12: return [3 /*break*/, 20];
|
|
317
|
+
case 13:
|
|
318
|
+
y = new constructor(remult_1, ds);
|
|
319
|
+
controllerRef = remult3_1.getControllerRef(y, remult_1);
|
|
320
|
+
return [4 /*yield*/, controllerRef._updateEntityBasedOnApi(d.fields)];
|
|
321
|
+
case 14:
|
|
322
|
+
_e.sent();
|
|
323
|
+
if (!remult_1.isAllowedForInstance(y, allowed))
|
|
324
|
+
throw new ForbiddenError();
|
|
325
|
+
return [4 /*yield*/, controllerRef.__validateEntity()];
|
|
326
|
+
case 15:
|
|
327
|
+
_e.sent();
|
|
328
|
+
_e.label = 16;
|
|
329
|
+
case 16:
|
|
330
|
+
_e.trys.push([16, 19, , 20]);
|
|
331
|
+
_d = {};
|
|
332
|
+
return [4 /*yield*/, originalMethod.apply(y, d.args)];
|
|
333
|
+
case 17:
|
|
334
|
+
_d.result = _e.sent();
|
|
335
|
+
return [4 /*yield*/, controllerRef.toApiJson()];
|
|
336
|
+
case 18:
|
|
337
|
+
r_1 = (_d.fields = _e.sent(),
|
|
338
|
+
_d);
|
|
339
|
+
return [3 /*break*/, 20];
|
|
340
|
+
case 19:
|
|
341
|
+
err_5 = _e.sent();
|
|
342
|
+
throw controllerRef.catchSaveErrors(err_5);
|
|
343
|
+
case 20: return [2 /*return*/];
|
|
344
|
+
}
|
|
345
|
+
});
|
|
346
|
+
}); })];
|
|
347
|
+
case 2:
|
|
348
|
+
_a.sent();
|
|
349
|
+
res.success(r_1);
|
|
350
|
+
return [3 /*break*/, 4];
|
|
351
|
+
case 3:
|
|
352
|
+
err_3 = _a.sent();
|
|
353
|
+
res.error(err_3);
|
|
354
|
+
return [3 /*break*/, 4];
|
|
355
|
+
case 4: return [2 /*return*/];
|
|
241
356
|
}
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
}
|
|
250
|
-
}));
|
|
251
|
-
await defs._updateEntityBasedOnApi(r.rowInfo.data);
|
|
252
|
-
return r.result;
|
|
253
|
-
}
|
|
254
|
-
catch (err) {
|
|
255
|
-
defs.catchSaveErrors(err);
|
|
256
|
-
throw err;
|
|
357
|
+
});
|
|
358
|
+
}); });
|
|
359
|
+
};
|
|
360
|
+
try {
|
|
361
|
+
for (var _b = tslib_1.__values(mh.classes.keys()), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
362
|
+
var constructor = _c.value;
|
|
363
|
+
_loop_1(constructor);
|
|
257
364
|
}
|
|
258
365
|
}
|
|
259
|
-
|
|
260
|
-
|
|
366
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
367
|
+
finally {
|
|
261
368
|
try {
|
|
262
|
-
|
|
263
|
-
let r = await (new class extends Action {
|
|
264
|
-
async execute(a, b) {
|
|
265
|
-
throw ('should get here');
|
|
266
|
-
}
|
|
267
|
-
}(mh.classes.get(this.constructor).key + "/" + key, options ? options.queue : false, options.allowed).run({
|
|
268
|
-
args,
|
|
269
|
-
fields: await defs.toApiJson()
|
|
270
|
-
}));
|
|
271
|
-
await defs._updateEntityBasedOnApi(r.fields);
|
|
272
|
-
return r.result;
|
|
273
|
-
}
|
|
274
|
-
catch (e) {
|
|
275
|
-
throw defs.catchSaveErrors(e);
|
|
369
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
276
370
|
}
|
|
371
|
+
finally { if (e_1) throw e_1.error; }
|
|
277
372
|
}
|
|
278
373
|
}
|
|
279
|
-
|
|
280
|
-
|
|
374
|
+
};
|
|
375
|
+
descriptor.value = function () {
|
|
376
|
+
var args = [];
|
|
377
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
378
|
+
args[_i] = arguments[_i];
|
|
379
|
+
}
|
|
380
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
381
|
+
var self_1, defs, classOptions_1, r, _a, _b, err_6, defs, r, _c, _d, e_2;
|
|
382
|
+
var _e, _f, _g;
|
|
383
|
+
return tslib_1.__generator(this, function (_h) {
|
|
384
|
+
switch (_h.label) {
|
|
385
|
+
case 0:
|
|
386
|
+
if (!!exports.actionInfo.runningOnServer) return [3 /*break*/, 16];
|
|
387
|
+
self_1 = this;
|
|
388
|
+
args = prepareArgsToSend(types, args);
|
|
389
|
+
if (!context_1.allEntities.includes(target.constructor)) return [3 /*break*/, 8];
|
|
390
|
+
defs = remult3_1.getEntityRef(self_1);
|
|
391
|
+
return [4 /*yield*/, defs.__validateEntity()];
|
|
392
|
+
case 1:
|
|
393
|
+
_h.sent();
|
|
394
|
+
classOptions_1 = mh.classes.get(self_1.constructor);
|
|
395
|
+
if (!classOptions_1.key) {
|
|
396
|
+
classOptions_1.key = defs.repository.metadata.key + "_methods";
|
|
397
|
+
}
|
|
398
|
+
_h.label = 2;
|
|
399
|
+
case 2:
|
|
400
|
+
_h.trys.push([2, 6, , 7]);
|
|
401
|
+
_b = (_a = new /** @class */ (function (_super) {
|
|
402
|
+
tslib_1.__extends(class_1, _super);
|
|
403
|
+
function class_1() {
|
|
404
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
405
|
+
}
|
|
406
|
+
class_1.prototype.execute = function (a, b) {
|
|
407
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
408
|
+
return tslib_1.__generator(this, function (_a) {
|
|
409
|
+
throw ('should get here');
|
|
410
|
+
});
|
|
411
|
+
});
|
|
412
|
+
};
|
|
413
|
+
return class_1;
|
|
414
|
+
}(Action))(classOptions_1.key + "/" + key, options ? options.queue : false, options.allowed)).run;
|
|
415
|
+
_e = {
|
|
416
|
+
args: args
|
|
417
|
+
};
|
|
418
|
+
_f = {};
|
|
419
|
+
return [4 /*yield*/, defs.toApiJson()];
|
|
420
|
+
case 3: return [4 /*yield*/, (_b.apply(_a, [(_e.rowInfo = (_f.data = _h.sent(),
|
|
421
|
+
_f.isNewRow = defs.isNew(),
|
|
422
|
+
_f.wasChanged = defs.wasChanged(),
|
|
423
|
+
_f.id = defs.getOriginalId(),
|
|
424
|
+
_f),
|
|
425
|
+
_e)]))];
|
|
426
|
+
case 4:
|
|
427
|
+
r = _h.sent();
|
|
428
|
+
return [4 /*yield*/, defs._updateEntityBasedOnApi(r.rowInfo.data)];
|
|
429
|
+
case 5:
|
|
430
|
+
_h.sent();
|
|
431
|
+
return [2 /*return*/, r.result];
|
|
432
|
+
case 6:
|
|
433
|
+
err_6 = _h.sent();
|
|
434
|
+
defs.catchSaveErrors(err_6);
|
|
435
|
+
throw err_6;
|
|
436
|
+
case 7: return [3 /*break*/, 15];
|
|
437
|
+
case 8:
|
|
438
|
+
defs = remult3_1.getControllerRef(self_1, undefined);
|
|
439
|
+
_h.label = 9;
|
|
440
|
+
case 9:
|
|
441
|
+
_h.trys.push([9, 14, , 15]);
|
|
442
|
+
return [4 /*yield*/, defs.__validateEntity()];
|
|
443
|
+
case 10:
|
|
444
|
+
_h.sent();
|
|
445
|
+
_d = (_c = new /** @class */ (function (_super) {
|
|
446
|
+
tslib_1.__extends(class_2, _super);
|
|
447
|
+
function class_2() {
|
|
448
|
+
return _super !== null && _super.apply(this, arguments) || this;
|
|
449
|
+
}
|
|
450
|
+
class_2.prototype.execute = function (a, b) {
|
|
451
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
452
|
+
return tslib_1.__generator(this, function (_a) {
|
|
453
|
+
throw ('should get here');
|
|
454
|
+
});
|
|
455
|
+
});
|
|
456
|
+
};
|
|
457
|
+
return class_2;
|
|
458
|
+
}(Action))(mh.classes.get(this.constructor).key + "/" + key, options ? options.queue : false, options.allowed)).run;
|
|
459
|
+
_g = {
|
|
460
|
+
args: args
|
|
461
|
+
};
|
|
462
|
+
return [4 /*yield*/, defs.toApiJson()];
|
|
463
|
+
case 11: return [4 /*yield*/, (_d.apply(_c, [(_g.fields = _h.sent(),
|
|
464
|
+
_g)]))];
|
|
465
|
+
case 12:
|
|
466
|
+
r = _h.sent();
|
|
467
|
+
return [4 /*yield*/, defs._updateEntityBasedOnApi(r.fields)];
|
|
468
|
+
case 13:
|
|
469
|
+
_h.sent();
|
|
470
|
+
return [2 /*return*/, r.result];
|
|
471
|
+
case 14:
|
|
472
|
+
e_2 = _h.sent();
|
|
473
|
+
throw defs.catchSaveErrors(e_2);
|
|
474
|
+
case 15: return [3 /*break*/, 18];
|
|
475
|
+
case 16: return [4 /*yield*/, originalMethod.apply(this, args)];
|
|
476
|
+
case 17: return [2 /*return*/, (_h.sent())];
|
|
477
|
+
case 18: return [2 /*return*/];
|
|
478
|
+
}
|
|
479
|
+
});
|
|
480
|
+
});
|
|
281
481
|
};
|
|
282
482
|
registerAction(target.constructor, descriptor);
|
|
283
|
-
descriptor.value[serverActionField] = serverAction;
|
|
483
|
+
descriptor.value[exports.serverActionField] = serverAction;
|
|
284
484
|
return descriptor;
|
|
285
485
|
};
|
|
286
486
|
}
|
|
287
|
-
|
|
487
|
+
exports.BackendMethod = BackendMethod;
|
|
488
|
+
var customUndefined = {
|
|
288
489
|
_isUndefined: true
|
|
289
490
|
};
|
|
290
491
|
function registerAction(target, descriptor) {
|
|
291
|
-
(target[classBackendMethodsArray] || (target[classBackendMethodsArray] = [])).push(descriptor.value);
|
|
292
|
-
actionInfo.allActions.push(descriptor.value);
|
|
492
|
+
(target[exports.classBackendMethodsArray] || (target[exports.classBackendMethodsArray] = [])).push(descriptor.value);
|
|
493
|
+
exports.actionInfo.allActions.push(descriptor.value);
|
|
293
494
|
}
|
|
294
495
|
function isCustomUndefined(x) {
|
|
295
496
|
return x && x._isUndefined;
|
|
296
497
|
}
|
|
297
|
-
|
|
298
|
-
|
|
498
|
+
var ProgressListener = /** @class */ (function () {
|
|
499
|
+
function ProgressListener(res) {
|
|
299
500
|
this.res = res;
|
|
300
501
|
}
|
|
301
|
-
progress(progress) {
|
|
502
|
+
ProgressListener.prototype.progress = function (progress) {
|
|
302
503
|
this.res.progress(progress);
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
|
|
504
|
+
};
|
|
505
|
+
return ProgressListener;
|
|
506
|
+
}());
|
|
507
|
+
exports.ProgressListener = ProgressListener;
|
|
508
|
+
function prepareArgsToSend(types, args) {
|
|
509
|
+
var e_3, _a;
|
|
306
510
|
if (types) {
|
|
307
|
-
for (
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
511
|
+
for (var index = 0; index < types.length; index++) {
|
|
512
|
+
var paramType = types[index];
|
|
513
|
+
try {
|
|
514
|
+
for (var _b = (e_3 = void 0, tslib_1.__values([context_1.Remult, sql_database_1.SqlDatabase])), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
515
|
+
var type = _c.value;
|
|
516
|
+
if (args[index] instanceof type)
|
|
517
|
+
args[index] = undefined;
|
|
518
|
+
else if (paramType == type) {
|
|
519
|
+
args[index] = undefined;
|
|
520
|
+
}
|
|
314
521
|
}
|
|
315
522
|
}
|
|
523
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
524
|
+
finally {
|
|
525
|
+
try {
|
|
526
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
527
|
+
}
|
|
528
|
+
finally { if (e_3) throw e_3.error; }
|
|
529
|
+
}
|
|
316
530
|
if (args[index] != undefined) {
|
|
317
|
-
|
|
318
|
-
x = decorateColumnSettings(x, new Remult());
|
|
531
|
+
var x = { valueType: paramType };
|
|
532
|
+
x = remult3_1.decorateColumnSettings(x, new context_1.Remult());
|
|
319
533
|
if (x.valueConverter)
|
|
320
534
|
args[index] = x.valueConverter.toJson(args[index]);
|
|
321
|
-
|
|
535
|
+
var eo = remult3_1.getEntitySettings(paramType, false);
|
|
322
536
|
if (eo != null) {
|
|
323
|
-
|
|
537
|
+
var rh = remult3_1.getEntityRef(args[index]);
|
|
324
538
|
args[index] = rh.getId();
|
|
325
539
|
}
|
|
326
540
|
}
|
|
327
541
|
}
|
|
328
542
|
}
|
|
329
|
-
return args.map(x
|
|
543
|
+
return args.map(function (x) { return x !== undefined ? x : customUndefined; });
|
|
330
544
|
}
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
545
|
+
exports.prepareArgsToSend = prepareArgsToSend;
|
|
546
|
+
function prepareReceivedArgs(types, args, remult, ds, res) {
|
|
547
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
548
|
+
var index, element, i, x, eo, _a, _b;
|
|
549
|
+
return tslib_1.__generator(this, function (_c) {
|
|
550
|
+
switch (_c.label) {
|
|
551
|
+
case 0:
|
|
552
|
+
for (index = 0; index < args.length; index++) {
|
|
553
|
+
element = args[index];
|
|
554
|
+
if (isCustomUndefined(element))
|
|
555
|
+
args[index] = undefined;
|
|
556
|
+
}
|
|
557
|
+
if (!types) return [3 /*break*/, 7];
|
|
558
|
+
i = 0;
|
|
559
|
+
_c.label = 1;
|
|
560
|
+
case 1:
|
|
561
|
+
if (!(i < types.length)) return [3 /*break*/, 7];
|
|
562
|
+
if (args.length < i) {
|
|
563
|
+
args.push(undefined);
|
|
564
|
+
}
|
|
565
|
+
if (!(types[i] == context_1.Remult || types[i] == context_1.Remult)) return [3 /*break*/, 2];
|
|
566
|
+
args[i] = remult;
|
|
567
|
+
return [3 /*break*/, 6];
|
|
568
|
+
case 2:
|
|
569
|
+
if (!(types[i] == sql_database_1.SqlDatabase && ds)) return [3 /*break*/, 3];
|
|
570
|
+
args[i] = ds;
|
|
571
|
+
return [3 /*break*/, 6];
|
|
572
|
+
case 3:
|
|
573
|
+
if (!(types[i] == ProgressListener)) return [3 /*break*/, 4];
|
|
574
|
+
args[i] = new ProgressListener(res);
|
|
575
|
+
return [3 /*break*/, 6];
|
|
576
|
+
case 4:
|
|
577
|
+
x = { valueType: types[i] };
|
|
578
|
+
x = remult3_1.decorateColumnSettings(x, remult);
|
|
579
|
+
if (x.valueConverter)
|
|
580
|
+
args[i] = x.valueConverter.fromJson(args[i]);
|
|
581
|
+
eo = remult3_1.getEntitySettings(types[i], false);
|
|
582
|
+
if (!(eo != null)) return [3 /*break*/, 6];
|
|
583
|
+
if (!!(args[i] === null || args[i] === undefined)) return [3 /*break*/, 6];
|
|
584
|
+
_a = args;
|
|
585
|
+
_b = i;
|
|
586
|
+
return [4 /*yield*/, remult.repo(types[i]).findId(args[i])];
|
|
587
|
+
case 5:
|
|
588
|
+
_a[_b] = _c.sent();
|
|
589
|
+
_c.label = 6;
|
|
590
|
+
case 6:
|
|
591
|
+
i++;
|
|
592
|
+
return [3 /*break*/, 1];
|
|
593
|
+
case 7: return [2 /*return*/, args];
|
|
361
594
|
}
|
|
362
|
-
}
|
|
363
|
-
|
|
595
|
+
});
|
|
596
|
+
});
|
|
364
597
|
}
|
|
365
|
-
|
|
598
|
+
exports.prepareReceivedArgs = prepareReceivedArgs;
|
|
599
|
+
exports.classBackendMethodsArray = Symbol('classBackendMethodsArray');
|