remult 0.17.3 → 0.18.0
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/SseSubscriptionServer.d.ts +23 -0
- package/SseSubscriptionServer.js +143 -0
- package/ably.d.ts +13 -0
- package/ably.js +59 -0
- package/esm/SseSubscriptionServer.d.ts +23 -0
- package/esm/SseSubscriptionServer.js +102 -0
- package/esm/ably.d.ts +13 -0
- package/esm/ably.js +28 -0
- package/esm/index.d.ts +7 -4
- package/esm/index.js +4 -2
- package/esm/live-query/data-provider-live-query-storage.d.ts +23 -0
- package/esm/live-query/data-provider-live-query-storage.js +78 -0
- package/esm/myLog.d.ts +1 -0
- package/esm/myLog.js +5 -0
- package/esm/postgres/postgres-data-provider.d.ts +4 -2
- package/esm/postgres/postgres-data-provider.js +18 -6
- package/esm/postgres/schema-builder.d.ts +2 -1
- package/esm/postgres/schema-builder.js +49 -29
- package/esm/remult-knex/index.d.ts +10 -32
- package/esm/remult-knex/index.js +75 -51
- package/esm/remult-mongo.d.ts +9 -2
- package/esm/remult-mongo.js +24 -8
- package/esm/remult-next.d.ts +11 -0
- package/esm/remult-next.js +27 -0
- package/esm/server/core.d.ts +2 -0
- package/esm/server/core.js +2 -0
- package/esm/server/expressBridge.d.ts +19 -7
- package/esm/server/expressBridge.js +135 -31
- package/esm/server/index.d.ts +2 -1
- package/esm/server/index.js +2 -1
- package/esm/server/initDataProvider.d.ts +2 -0
- package/esm/server/initDataProvider.js +14 -0
- package/esm/src/buildRestDataProvider.d.ts +31 -0
- package/esm/src/buildRestDataProvider.js +110 -0
- package/esm/src/column-interfaces.d.ts +44 -8
- package/esm/src/column.d.ts +3 -3
- package/esm/src/context.d.ts +39 -36
- package/esm/src/context.js +87 -117
- package/esm/src/data-api.d.ts +9 -3
- package/esm/src/data-api.js +130 -63
- package/esm/src/data-interfaces.d.ts +5 -1
- package/esm/src/data-providers/array-entity-data-provider.d.ts +1 -1
- package/esm/src/data-providers/array-entity-data-provider.js +2 -17
- package/esm/src/data-providers/rest-data-provider.d.ts +4 -3
- package/esm/src/data-providers/rest-data-provider.js +64 -23
- package/esm/src/data-providers/sql-database.d.ts +7 -3
- package/esm/src/data-providers/sql-database.js +60 -17
- package/esm/src/data-providers/web-sql-data-provider.d.ts +3 -0
- package/esm/src/data-providers/web-sql-data-provider.js +23 -9
- package/esm/src/entity.d.ts +2 -2
- package/esm/src/filter/filter-consumer-bridge-to-sql-request.d.ts +16 -16
- package/esm/src/filter/filter-consumer-bridge-to-sql-request.js +29 -21
- package/esm/src/filter/filter-interfaces.d.ts +5 -5
- package/esm/src/filter/filter-interfaces.js +31 -26
- package/esm/src/live-query/LiveQueryClient.d.ts +1 -0
- package/esm/src/live-query/LiveQueryClient.js +184 -0
- package/esm/src/live-query/SseSubscriptionClient.d.ts +5 -0
- package/esm/src/live-query/SseSubscriptionClient.js +86 -0
- package/esm/src/live-query/SubscriptionChannel.d.ts +41 -0
- package/esm/src/live-query/SubscriptionChannel.js +121 -0
- package/esm/src/live-query/SubscriptionServer.d.ts +38 -0
- package/esm/src/live-query/SubscriptionServer.js +108 -0
- package/esm/src/remult-proxy.d.ts +1 -1
- package/esm/src/remult-proxy.js +52 -7
- package/esm/src/remult3/RepositoryImplementation.d.ts +14 -5
- package/esm/src/remult3/RepositoryImplementation.js +124 -44
- package/esm/src/remult3/getId.d.ts +2 -0
- package/esm/src/remult3/getId.js +7 -0
- package/esm/src/remult3/remult3.d.ts +67 -10
- package/esm/src/remult3/remult3.js +1 -0
- package/esm/src/server-action.d.ts +5 -1
- package/esm/src/server-action.js +11 -12
- package/esm/src/shared-tests/db-tests-setup.d.ts +12 -5
- package/esm/src/shared-tests/db-tests-setup.js +14 -6
- package/esm/src/shared-tests/db-tests.db-tests.js +71 -10
- package/esm/src/sort.d.ts +1 -0
- package/esm/src/sort.js +18 -0
- package/esm/src/sql-command.d.ts +5 -2
- package/esm/src/tests/entityForCustomFilter.d.ts +6 -6
- package/esm/src/tests/entityForCustomFilter.js +20 -21
- package/esm/src/tests/frontend-database-tests-setup.spec.js +3 -4
- package/esm/src/tests/testHelper.spec.d.ts +3 -1
- package/esm/src/tests/testHelper.spec.js +63 -60
- package/esm/src/valueConverters.js +15 -7
- package/index.d.ts +7 -4
- package/index.js +7 -3
- package/live-query/data-provider-live-query-storage.d.ts +23 -0
- package/live-query/data-provider-live-query-storage.js +236 -0
- package/myLog.d.ts +1 -0
- package/myLog.js +20 -0
- package/package.json +18 -1
- package/postgres/postgres-data-provider.d.ts +4 -2
- package/postgres/postgres-data-provider.js +54 -39
- package/postgres/schema-builder.d.ts +2 -1
- package/postgres/schema-builder.js +118 -70
- package/remult-express.js +1 -1
- package/remult-knex/index.d.ts +10 -32
- package/remult-knex/index.js +134 -87
- package/remult-mongo.d.ts +9 -2
- package/remult-mongo.js +39 -7
- package/remult-next.d.ts +11 -0
- package/remult-next.js +73 -0
- package/server/JsonEntityFileStorage.js +2 -2
- package/server/core.d.ts +2 -0
- package/server/core.js +5 -1
- package/server/expressBridge.d.ts +19 -7
- package/server/expressBridge.js +283 -69
- package/server/index.d.ts +2 -1
- package/server/index.js +3 -1
- package/server/initDataProvider.d.ts +2 -0
- package/server/initDataProvider.js +26 -0
- package/src/buildRestDataProvider.d.ts +31 -0
- package/src/buildRestDataProvider.js +162 -0
- package/src/column-interfaces.d.ts +44 -8
- package/src/column.d.ts +3 -3
- package/src/context.d.ts +39 -36
- package/src/context.js +171 -166
- package/src/data-api.d.ts +9 -3
- package/src/data-api.js +233 -88
- package/src/data-interfaces.d.ts +5 -1
- package/src/data-providers/array-entity-data-provider.d.ts +1 -1
- package/src/data-providers/array-entity-data-provider.js +2 -17
- package/src/data-providers/rest-data-provider.d.ts +4 -3
- package/src/data-providers/rest-data-provider.js +105 -39
- package/src/data-providers/sql-database.d.ts +7 -3
- package/src/data-providers/sql-database.js +89 -16
- package/src/data-providers/web-sql-data-provider.d.ts +3 -0
- package/src/data-providers/web-sql-data-provider.js +56 -11
- package/src/entity.d.ts +2 -2
- package/src/filter/filter-consumer-bridge-to-sql-request.d.ts +16 -16
- package/src/filter/filter-consumer-bridge-to-sql-request.js +59 -50
- package/src/filter/filter-interfaces.d.ts +5 -5
- package/src/filter/filter-interfaces.js +31 -26
- package/src/live-query/LiveQueryClient.d.ts +1 -0
- package/src/live-query/LiveQueryClient.js +283 -0
- package/src/live-query/SseSubscriptionClient.d.ts +5 -0
- package/src/live-query/SseSubscriptionClient.js +150 -0
- package/src/live-query/SubscriptionChannel.d.ts +41 -0
- package/src/live-query/SubscriptionChannel.js +209 -0
- package/src/live-query/SubscriptionServer.d.ts +38 -0
- package/src/live-query/SubscriptionServer.js +258 -0
- package/src/remult-proxy.d.ts +1 -1
- package/src/remult-proxy.js +153 -8
- package/src/remult3/RepositoryImplementation.d.ts +14 -5
- package/src/remult3/RepositoryImplementation.js +200 -85
- package/src/remult3/getId.d.ts +2 -0
- package/src/remult3/getId.js +11 -0
- package/src/remult3/remult3.d.ts +67 -10
- package/src/remult3/remult3.js +1 -0
- package/src/server-action.d.ts +5 -1
- package/src/server-action.js +11 -11
- package/src/shared-tests/db-tests-setup.d.ts +12 -5
- package/src/shared-tests/db-tests-setup.js +17 -8
- package/src/shared-tests/db-tests.db-tests.js +140 -8
- package/src/sort.d.ts +1 -0
- package/src/sort.js +18 -0
- package/src/sql-command.d.ts +5 -2
- package/src/tests/entityForCustomFilter.d.ts +6 -6
- package/src/tests/entityForCustomFilter.js +30 -31
- package/src/tests/frontend-database-tests-setup.spec.js +5 -6
- package/src/tests/testHelper.spec.d.ts +3 -1
- package/src/tests/testHelper.spec.js +104 -100
- package/src/valueConverters.js +15 -7
package/src/context.js
CHANGED
|
@@ -1,143 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.doTransaction = exports.EventSource = exports.queryConfig = exports.Allow = exports.setControllerSettings = exports.ClassHelper = exports.classHelpers = exports.allEntities = exports.Remult = exports.isBackend = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var server_action_1 = require("./server-action");
|
|
6
6
|
var rest_data_provider_1 = require("./data-providers/rest-data-provider");
|
|
7
7
|
var RepositoryImplementation_1 = require("./remult3/RepositoryImplementation");
|
|
8
|
-
var
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
HttpProviderBridgeToRestDataProviderHttpProvider.prototype.post = function (url, data) {
|
|
13
|
-
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
14
|
-
var _this = this;
|
|
15
|
-
return tslib_1.__generator(this, function (_a) {
|
|
16
|
-
switch (_a.label) {
|
|
17
|
-
case 0: return [4 /*yield*/, retry(function () { return toPromise(_this.http.post(url, data)); })];
|
|
18
|
-
case 1: return [2 /*return*/, _a.sent()];
|
|
19
|
-
}
|
|
20
|
-
});
|
|
21
|
-
});
|
|
22
|
-
};
|
|
23
|
-
HttpProviderBridgeToRestDataProviderHttpProvider.prototype.delete = function (url) {
|
|
24
|
-
return toPromise(this.http.delete(url));
|
|
25
|
-
};
|
|
26
|
-
HttpProviderBridgeToRestDataProviderHttpProvider.prototype.put = function (url, data) {
|
|
27
|
-
return toPromise(this.http.put(url, data));
|
|
28
|
-
};
|
|
29
|
-
HttpProviderBridgeToRestDataProviderHttpProvider.prototype.get = function (url) {
|
|
30
|
-
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
31
|
-
var _this = this;
|
|
32
|
-
return tslib_1.__generator(this, function (_a) {
|
|
33
|
-
switch (_a.label) {
|
|
34
|
-
case 0: return [4 /*yield*/, retry(function () { return toPromise(_this.http.get(url)); })];
|
|
35
|
-
case 1: return [2 /*return*/, _a.sent()];
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
});
|
|
39
|
-
};
|
|
40
|
-
return HttpProviderBridgeToRestDataProviderHttpProvider;
|
|
41
|
-
}());
|
|
42
|
-
exports.HttpProviderBridgeToRestDataProviderHttpProvider = HttpProviderBridgeToRestDataProviderHttpProvider;
|
|
43
|
-
function retry(what) {
|
|
44
|
-
var _a, _b, _c, _d;
|
|
45
|
-
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
46
|
-
var err_1;
|
|
47
|
-
return tslib_1.__generator(this, function (_e) {
|
|
48
|
-
switch (_e.label) {
|
|
49
|
-
case 0:
|
|
50
|
-
if (!true) return [3 /*break*/, 7];
|
|
51
|
-
_e.label = 1;
|
|
52
|
-
case 1:
|
|
53
|
-
_e.trys.push([1, 3, , 6]);
|
|
54
|
-
return [4 /*yield*/, what()];
|
|
55
|
-
case 2: return [2 /*return*/, _e.sent()];
|
|
56
|
-
case 3:
|
|
57
|
-
err_1 = _e.sent();
|
|
58
|
-
if (!(((_a = err_1.message) === null || _a === void 0 ? void 0 : _a.startsWith("Error occurred while trying to proxy")) || ((_b = err_1.message) === null || _b === void 0 ? void 0 : _b.startsWith("Error occured while trying to proxy")) || ((_c = err_1.message) === null || _c === void 0 ? void 0 : _c.includes("http proxy error")) || ((_d = err_1.message) === null || _d === void 0 ? void 0 : _d.startsWith("Gateway Timeout")))) return [3 /*break*/, 5];
|
|
59
|
-
return [4 /*yield*/, new Promise(function (res, req) {
|
|
60
|
-
setTimeout(function () {
|
|
61
|
-
res({});
|
|
62
|
-
}, 250);
|
|
63
|
-
})];
|
|
64
|
-
case 4:
|
|
65
|
-
_e.sent();
|
|
66
|
-
return [3 /*break*/, 0];
|
|
67
|
-
case 5: throw err_1;
|
|
68
|
-
case 6: return [3 /*break*/, 0];
|
|
69
|
-
case 7: return [2 /*return*/];
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
exports.retry = retry;
|
|
75
|
-
function toPromise(p) {
|
|
76
|
-
var _this = this;
|
|
77
|
-
var r;
|
|
78
|
-
if (p["toPromise"] !== undefined) {
|
|
79
|
-
r = p["toPromise"]();
|
|
80
|
-
}
|
|
81
|
-
//@ts-ignore
|
|
82
|
-
else
|
|
83
|
-
r = p;
|
|
84
|
-
return r.then(function (x) {
|
|
85
|
-
if (x && (x.status == 200 || x.status == 201) && x.headers && x.request && x.data) //for axios
|
|
86
|
-
return x.data;
|
|
87
|
-
return x;
|
|
88
|
-
}).catch(function (ex) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
89
|
-
return tslib_1.__generator(this, function (_a) {
|
|
90
|
-
switch (_a.label) {
|
|
91
|
-
case 0: return [4 /*yield*/, processHttpException(ex)];
|
|
92
|
-
case 1: throw _a.sent();
|
|
93
|
-
}
|
|
94
|
-
});
|
|
95
|
-
}); });
|
|
96
|
-
}
|
|
97
|
-
exports.toPromise = toPromise;
|
|
98
|
-
function processHttpException(ex) {
|
|
99
|
-
var _a, _b, _c;
|
|
100
|
-
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
101
|
-
var z, error, httpStatusCode, result;
|
|
102
|
-
return tslib_1.__generator(this, function (_d) {
|
|
103
|
-
switch (_d.label) {
|
|
104
|
-
case 0: return [4 /*yield*/, ex];
|
|
105
|
-
case 1:
|
|
106
|
-
z = _d.sent();
|
|
107
|
-
if (z.error)
|
|
108
|
-
error = z.error;
|
|
109
|
-
else if (z.isAxiosError) {
|
|
110
|
-
if (typeof ((_a = z.response) === null || _a === void 0 ? void 0 : _a.data) === "string")
|
|
111
|
-
error = z.response.data;
|
|
112
|
-
else
|
|
113
|
-
error = (_b = z === null || z === void 0 ? void 0 : z.response) === null || _b === void 0 ? void 0 : _b.data;
|
|
114
|
-
}
|
|
115
|
-
if (!error)
|
|
116
|
-
error = z.message;
|
|
117
|
-
if (z.status == 0 && z.error.isTrusted)
|
|
118
|
-
error = "Network Error";
|
|
119
|
-
if (typeof error === 'string') {
|
|
120
|
-
error = {
|
|
121
|
-
message: error,
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
if (z.modelState)
|
|
125
|
-
error.modelState = z.modelState;
|
|
126
|
-
httpStatusCode = z.status;
|
|
127
|
-
if (httpStatusCode === undefined)
|
|
128
|
-
httpStatusCode = (_c = z.response) === null || _c === void 0 ? void 0 : _c.status;
|
|
129
|
-
if (httpStatusCode !== undefined && httpStatusCode !== null) {
|
|
130
|
-
error.httpStatusCode = httpStatusCode;
|
|
131
|
-
}
|
|
132
|
-
result = Object.assign(error, {
|
|
133
|
-
// exception: ex disabled for now because JSON.stringify crashed with this
|
|
134
|
-
});
|
|
135
|
-
return [2 /*return*/, result];
|
|
136
|
-
}
|
|
137
|
-
});
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
exports.processHttpException = processHttpException;
|
|
8
|
+
var LiveQueryClient_1 = require("./live-query/LiveQueryClient");
|
|
9
|
+
var SseSubscriptionClient_1 = require("./live-query/SseSubscriptionClient");
|
|
10
|
+
var remult_proxy_1 = require("./remult-proxy");
|
|
11
|
+
var buildRestDataProvider_1 = require("./buildRestDataProvider");
|
|
141
12
|
function isBackend() {
|
|
142
13
|
return server_action_1.actionInfo.runningOnServer;
|
|
143
14
|
}
|
|
@@ -145,19 +16,30 @@ exports.isBackend = isBackend;
|
|
|
145
16
|
var Remult = /** @class */ (function () {
|
|
146
17
|
function Remult(provider) {
|
|
147
18
|
var _this = this;
|
|
148
|
-
/* @internal */
|
|
149
|
-
this.repCache = new Map();
|
|
150
19
|
/** The current data provider */
|
|
151
20
|
this.dataProvider = new rest_data_provider_1.RestDataProvider(function () { return _this.apiClient; });
|
|
21
|
+
/* @internal */
|
|
22
|
+
this.repCache = new Map();
|
|
23
|
+
/* @internal*/
|
|
24
|
+
this.liveQueryPublisher = {
|
|
25
|
+
itemChanged: function () { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
|
|
26
|
+
return [2 /*return*/];
|
|
27
|
+
}); }); }
|
|
28
|
+
};
|
|
29
|
+
/* @internal*/
|
|
30
|
+
this.liveQuerySubscriber = new LiveQueryClient_1.LiveQueryClient(function () { return _this.apiClient; }, function () { var _a; return (_a = _this.user) === null || _a === void 0 ? void 0 : _a.id; });
|
|
31
|
+
/** context information that can be used to store custom information that will be disposed as part of the `remult` object */
|
|
152
32
|
this.context = {};
|
|
33
|
+
/** The api client that will be used by `remult` to perform calls to the `api` */
|
|
153
34
|
this.apiClient = {
|
|
154
|
-
url: '/api'
|
|
35
|
+
url: '/api',
|
|
36
|
+
subscriptionClient: new SseSubscriptionClient_1.SseSubscriptionClient()
|
|
155
37
|
};
|
|
156
38
|
if (provider && provider.getEntityDataProvider) {
|
|
157
39
|
this.dataProvider = provider;
|
|
158
40
|
return;
|
|
159
41
|
}
|
|
160
|
-
if (isExternalHttpProvider(provider)) {
|
|
42
|
+
if (buildRestDataProvider_1.isExternalHttpProvider(provider)) {
|
|
161
43
|
this.apiClient.httpClient = provider;
|
|
162
44
|
}
|
|
163
45
|
else if (typeof (provider) === "function")
|
|
@@ -168,13 +50,18 @@ var Remult = /** @class */ (function () {
|
|
|
168
50
|
this.apiClient.httpClient = apiClient.httpClient;
|
|
169
51
|
if (apiClient.url)
|
|
170
52
|
this.apiClient.url = apiClient.url;
|
|
53
|
+
if (apiClient.subscriptionClient)
|
|
54
|
+
this.apiClient.subscriptionClient = apiClient.subscriptionClient;
|
|
55
|
+
if (apiClient.wrapMessageHandling)
|
|
56
|
+
this.apiClient.wrapMessageHandling = apiClient.wrapMessageHandling;
|
|
171
57
|
}
|
|
172
58
|
}
|
|
173
59
|
/**Return's a `Repository` of the specific entity type
|
|
174
60
|
* @example
|
|
175
61
|
* const taskRepo = remult.repo(Task);
|
|
176
62
|
* @see [Repository](https://remult.dev/docs/ref_repository.html)
|
|
177
|
-
*
|
|
63
|
+
* @param entity - the entity to use
|
|
64
|
+
* @param dataProvider - an optional alternative data provider to use. Useful for writing to offline storage or an alternative data provider
|
|
178
65
|
*/
|
|
179
66
|
Remult.prototype.repo = function (entity, dataProvider) {
|
|
180
67
|
if (dataProvider === undefined)
|
|
@@ -188,7 +75,6 @@ var Remult = /** @class */ (function () {
|
|
|
188
75
|
}
|
|
189
76
|
return r;
|
|
190
77
|
};
|
|
191
|
-
/* delete me */
|
|
192
78
|
/** Checks if a user was authenticated */
|
|
193
79
|
Remult.prototype.authenticated = function () {
|
|
194
80
|
var _a;
|
|
@@ -258,11 +144,19 @@ var Remult = /** @class */ (function () {
|
|
|
258
144
|
}
|
|
259
145
|
}
|
|
260
146
|
else if (typeof (allowed) === "function") {
|
|
261
|
-
return allowed(
|
|
147
|
+
return allowed(instance, this);
|
|
262
148
|
}
|
|
263
149
|
else
|
|
264
150
|
return this.isAllowed(allowed);
|
|
265
151
|
};
|
|
152
|
+
//@ts-ignore // type error of typescript regarding args that doesn't appear in my normal development
|
|
153
|
+
/** Used to call a `backendMethod` using a specific `remult` object
|
|
154
|
+
* @example
|
|
155
|
+
* await remult.call(TasksController.setAll, undefined, true);
|
|
156
|
+
* @param backendMethod - the backend method to call
|
|
157
|
+
* @param classInstance - the class instance of the backend method, for static backend methods use undefined
|
|
158
|
+
* @param args - the arguments to send to the backend method
|
|
159
|
+
*/
|
|
266
160
|
Remult.prototype.call = function (backendMethod, classInstance) {
|
|
267
161
|
var args = [];
|
|
268
162
|
for (var _i = 2; _i < arguments.length; _i++) {
|
|
@@ -272,7 +166,7 @@ var Remult = /** @class */ (function () {
|
|
|
272
166
|
if (!z.doWork)
|
|
273
167
|
throw Error("The method received is not a valid backend method");
|
|
274
168
|
//@ts-ignore
|
|
275
|
-
return z.doWork(args, classInstance, this.apiClient.url, buildRestDataProvider(this.apiClient.httpClient));
|
|
169
|
+
return z.doWork(args, classInstance, this.apiClient.url, buildRestDataProvider_1.buildRestDataProvider(this.apiClient.httpClient));
|
|
276
170
|
};
|
|
277
171
|
Remult.prototype.clearAllCache = function () {
|
|
278
172
|
this.repCache.clear();
|
|
@@ -282,6 +176,7 @@ var Remult = /** @class */ (function () {
|
|
|
282
176
|
return Remult;
|
|
283
177
|
}());
|
|
284
178
|
exports.Remult = Remult;
|
|
179
|
+
remult_proxy_1.RemultProxy.defaultRemult = new Remult();
|
|
285
180
|
;
|
|
286
181
|
exports.allEntities = [];
|
|
287
182
|
exports.classHelpers = new Map();
|
|
@@ -292,29 +187,6 @@ var ClassHelper = /** @class */ (function () {
|
|
|
292
187
|
return ClassHelper;
|
|
293
188
|
}());
|
|
294
189
|
exports.ClassHelper = ClassHelper;
|
|
295
|
-
function isExternalHttpProvider(item) {
|
|
296
|
-
var http = item;
|
|
297
|
-
if (http && http.get && http.put && http.post && http.delete)
|
|
298
|
-
return true;
|
|
299
|
-
return false;
|
|
300
|
-
}
|
|
301
|
-
function buildRestDataProvider(provider) {
|
|
302
|
-
if (!provider)
|
|
303
|
-
return new rest_data_provider_1.RestDataProviderHttpProviderUsingFetch();
|
|
304
|
-
var httpDataProvider;
|
|
305
|
-
if (!httpDataProvider) {
|
|
306
|
-
if (isExternalHttpProvider(provider)) {
|
|
307
|
-
httpDataProvider = new HttpProviderBridgeToRestDataProviderHttpProvider(provider);
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
if (!httpDataProvider) {
|
|
311
|
-
if (typeof provider === "function") {
|
|
312
|
-
httpDataProvider = new rest_data_provider_1.RestDataProviderHttpProviderUsingFetch(provider);
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
return httpDataProvider;
|
|
316
|
-
}
|
|
317
|
-
exports.buildRestDataProvider = buildRestDataProvider;
|
|
318
190
|
function setControllerSettings(target, options) {
|
|
319
191
|
var r = target;
|
|
320
192
|
while (true) {
|
|
@@ -333,7 +205,20 @@ var Allow = /** @class */ (function () {
|
|
|
333
205
|
function Allow() {
|
|
334
206
|
}
|
|
335
207
|
Allow.everyone = function () { return true; };
|
|
336
|
-
Allow.authenticated = function (
|
|
208
|
+
Allow.authenticated = function () {
|
|
209
|
+
var args = [];
|
|
210
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
211
|
+
args[_i] = arguments[_i];
|
|
212
|
+
}
|
|
213
|
+
if (args.length > 1) {
|
|
214
|
+
return args[1].authenticated();
|
|
215
|
+
}
|
|
216
|
+
else if (args.length == 1) {
|
|
217
|
+
if (args[0].authenticated)
|
|
218
|
+
return args[0].authenticated();
|
|
219
|
+
}
|
|
220
|
+
return remult_proxy_1.RemultProxy.defaultRemult.authenticated();
|
|
221
|
+
};
|
|
337
222
|
return Allow;
|
|
338
223
|
}());
|
|
339
224
|
exports.Allow = Allow;
|
|
@@ -401,3 +286,123 @@ var EventSource = /** @class */ (function () {
|
|
|
401
286
|
return EventSource;
|
|
402
287
|
}());
|
|
403
288
|
exports.EventSource = EventSource;
|
|
289
|
+
function doTransaction(remult, what) {
|
|
290
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
291
|
+
var trans, ok, result;
|
|
292
|
+
var _this = this;
|
|
293
|
+
return tslib_1.__generator(this, function (_a) {
|
|
294
|
+
switch (_a.label) {
|
|
295
|
+
case 0:
|
|
296
|
+
trans = new transactionLiveQueryPublisher(remult.liveQueryPublisher);
|
|
297
|
+
ok = true;
|
|
298
|
+
return [4 /*yield*/, remult.dataProvider.transaction(function (ds) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
299
|
+
return tslib_1.__generator(this, function (_a) {
|
|
300
|
+
switch (_a.label) {
|
|
301
|
+
case 0:
|
|
302
|
+
remult.dataProvider = (ds);
|
|
303
|
+
remult.liveQueryPublisher = trans;
|
|
304
|
+
return [4 /*yield*/, what()];
|
|
305
|
+
case 1:
|
|
306
|
+
_a.sent();
|
|
307
|
+
ok = true;
|
|
308
|
+
return [2 /*return*/];
|
|
309
|
+
}
|
|
310
|
+
});
|
|
311
|
+
}); })];
|
|
312
|
+
case 1:
|
|
313
|
+
result = _a.sent();
|
|
314
|
+
if (!ok) return [3 /*break*/, 3];
|
|
315
|
+
return [4 /*yield*/, trans.flush()];
|
|
316
|
+
case 2:
|
|
317
|
+
_a.sent();
|
|
318
|
+
_a.label = 3;
|
|
319
|
+
case 3: return [2 /*return*/];
|
|
320
|
+
}
|
|
321
|
+
});
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
exports.doTransaction = doTransaction;
|
|
325
|
+
var transactionLiveQueryPublisher = /** @class */ (function () {
|
|
326
|
+
function transactionLiveQueryPublisher(orig) {
|
|
327
|
+
this.orig = orig;
|
|
328
|
+
this.transactionItems = new Map();
|
|
329
|
+
}
|
|
330
|
+
transactionLiveQueryPublisher.prototype.itemChanged = function (entityKey, changes) {
|
|
331
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
332
|
+
var items, _loop_1, changes_1, changes_1_1, c;
|
|
333
|
+
var e_4, _a;
|
|
334
|
+
return tslib_1.__generator(this, function (_b) {
|
|
335
|
+
items = this.transactionItems.get(entityKey);
|
|
336
|
+
if (!items) {
|
|
337
|
+
this.transactionItems.set(entityKey, items = []);
|
|
338
|
+
}
|
|
339
|
+
_loop_1 = function (c) {
|
|
340
|
+
if (c.oldId !== undefined) {
|
|
341
|
+
var item = items.find(function (y) { return y.id === c.oldId; });
|
|
342
|
+
if (item !== undefined) {
|
|
343
|
+
if (c.deleted)
|
|
344
|
+
item.deleted = true;
|
|
345
|
+
if (c.id != item.id)
|
|
346
|
+
item.id = c.id;
|
|
347
|
+
}
|
|
348
|
+
else
|
|
349
|
+
items.push(c);
|
|
350
|
+
}
|
|
351
|
+
else
|
|
352
|
+
items.push(c);
|
|
353
|
+
};
|
|
354
|
+
try {
|
|
355
|
+
for (changes_1 = tslib_1.__values(changes), changes_1_1 = changes_1.next(); !changes_1_1.done; changes_1_1 = changes_1.next()) {
|
|
356
|
+
c = changes_1_1.value;
|
|
357
|
+
_loop_1(c);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
361
|
+
finally {
|
|
362
|
+
try {
|
|
363
|
+
if (changes_1_1 && !changes_1_1.done && (_a = changes_1.return)) _a.call(changes_1);
|
|
364
|
+
}
|
|
365
|
+
finally { if (e_4) throw e_4.error; }
|
|
366
|
+
}
|
|
367
|
+
return [2 /*return*/];
|
|
368
|
+
});
|
|
369
|
+
});
|
|
370
|
+
};
|
|
371
|
+
transactionLiveQueryPublisher.prototype.flush = function () {
|
|
372
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
373
|
+
var _a, _b, key, e_5_1;
|
|
374
|
+
var e_5, _c;
|
|
375
|
+
return tslib_1.__generator(this, function (_d) {
|
|
376
|
+
switch (_d.label) {
|
|
377
|
+
case 0:
|
|
378
|
+
_d.trys.push([0, 5, 6, 7]);
|
|
379
|
+
_a = tslib_1.__values(this.transactionItems.keys()), _b = _a.next();
|
|
380
|
+
_d.label = 1;
|
|
381
|
+
case 1:
|
|
382
|
+
if (!!_b.done) return [3 /*break*/, 4];
|
|
383
|
+
key = _b.value;
|
|
384
|
+
return [4 /*yield*/, this.orig.itemChanged(key, this.transactionItems.get(key))];
|
|
385
|
+
case 2:
|
|
386
|
+
_d.sent();
|
|
387
|
+
_d.label = 3;
|
|
388
|
+
case 3:
|
|
389
|
+
_b = _a.next();
|
|
390
|
+
return [3 /*break*/, 1];
|
|
391
|
+
case 4: return [3 /*break*/, 7];
|
|
392
|
+
case 5:
|
|
393
|
+
e_5_1 = _d.sent();
|
|
394
|
+
e_5 = { error: e_5_1 };
|
|
395
|
+
return [3 /*break*/, 7];
|
|
396
|
+
case 6:
|
|
397
|
+
try {
|
|
398
|
+
if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
|
|
399
|
+
}
|
|
400
|
+
finally { if (e_5) throw e_5.error; }
|
|
401
|
+
return [7 /*endfinally*/];
|
|
402
|
+
case 7: return [2 /*return*/];
|
|
403
|
+
}
|
|
404
|
+
});
|
|
405
|
+
});
|
|
406
|
+
};
|
|
407
|
+
return transactionLiveQueryPublisher;
|
|
408
|
+
}());
|
package/src/data-api.d.ts
CHANGED
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
import { Remult } from './context';
|
|
2
|
-
import { Repository } from './remult3';
|
|
2
|
+
import { FindOptions, Repository } from './remult3';
|
|
3
3
|
import { ErrorInfo } from './data-interfaces';
|
|
4
4
|
export declare class DataApi<T = any> {
|
|
5
5
|
private repository;
|
|
6
6
|
private remult;
|
|
7
7
|
constructor(repository: Repository<T>, remult: Remult);
|
|
8
|
-
httpGet(res: DataApiResponse, req: DataApiRequest): Promise<void>;
|
|
9
|
-
httpPost(res: DataApiResponse, req: DataApiRequest, body: any): Promise<void>;
|
|
8
|
+
httpGet(res: DataApiResponse, req: DataApiRequest, serializeRequest: () => any): Promise<void>;
|
|
9
|
+
httpPost(res: DataApiResponse, req: DataApiRequest, body: any, serializeRequest: () => any): Promise<void>;
|
|
10
10
|
static defaultGetLimit: number;
|
|
11
11
|
get(response: DataApiResponse, id: any): Promise<void>;
|
|
12
12
|
count(response: DataApiResponse, request: DataApiRequest, filterBody?: any): Promise<void>;
|
|
13
|
+
getArrayImpl(response: DataApiResponse, request: DataApiRequest, filterBody: any): Promise<{
|
|
14
|
+
r: any[];
|
|
15
|
+
findOptions: FindOptions<T>;
|
|
16
|
+
}>;
|
|
13
17
|
getArray(response: DataApiResponse, request: DataApiRequest, filterBody?: any): Promise<void>;
|
|
18
|
+
liveQuery(response: DataApiResponse, request: DataApiRequest, filterBody: any, serializeRequest: () => any, queryChannel: string): Promise<void>;
|
|
14
19
|
private buildWhere;
|
|
15
20
|
private doOnId;
|
|
16
21
|
put(response: DataApiResponse, id: any, body: any): Promise<void>;
|
|
@@ -31,3 +36,4 @@ export interface DataApiRequest {
|
|
|
31
36
|
}
|
|
32
37
|
export declare function determineSort(sortUrlParm: string, dirUrlParam: string): any;
|
|
33
38
|
export declare function serializeError(data: ErrorInfo): ErrorInfo<any>;
|
|
39
|
+
export declare function getLiveQueryChannel(queryId: string, userId: string): string;
|