remult 0.17.2 → 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/graphql.js +0 -1
- 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/graphql.js +0 -1
- 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
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.addFilterToUrlAndReturnTrueIfSuccessful = exports.RestDataProviderHttpProviderUsingFetch = exports.RestEntityDataProvider = exports.RestDataProvider = void 0;
|
|
3
|
+
exports.liveQueryAction = exports.addFilterToUrlAndReturnTrueIfSuccessful = exports.RestDataProviderHttpProviderUsingFetch = exports.RestEntityDataProvider = exports.findOptionsFromJson = exports.findOptionsToJson = exports.RestDataProvider = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var urlBuilder_1 = require("../../urlBuilder");
|
|
6
6
|
var filter_interfaces_1 = require("../filter/filter-interfaces");
|
|
7
|
-
var
|
|
7
|
+
var buildRestDataProvider_1 = require("../buildRestDataProvider");
|
|
8
|
+
var server_action_1 = require("../server-action");
|
|
8
9
|
var RestDataProvider = /** @class */ (function () {
|
|
9
10
|
function RestDataProvider(apiProvider) {
|
|
10
11
|
this.apiProvider = apiProvider;
|
|
11
|
-
this.
|
|
12
|
+
this.supportsRawFilter = true;
|
|
12
13
|
}
|
|
13
14
|
RestDataProvider.prototype.getEntityDataProvider = function (entity) {
|
|
14
15
|
var _this = this;
|
|
@@ -19,7 +20,7 @@ var RestDataProvider = /** @class */ (function () {
|
|
|
19
20
|
url = '/api';
|
|
20
21
|
return url + '/' + entity.key;
|
|
21
22
|
}, function () {
|
|
22
|
-
return
|
|
23
|
+
return buildRestDataProvider_1.buildRestDataProvider(_this.apiProvider().httpClient);
|
|
23
24
|
}, entity);
|
|
24
25
|
};
|
|
25
26
|
RestDataProvider.prototype.transaction = function (action) {
|
|
@@ -32,6 +33,42 @@ var RestDataProvider = /** @class */ (function () {
|
|
|
32
33
|
return RestDataProvider;
|
|
33
34
|
}());
|
|
34
35
|
exports.RestDataProvider = RestDataProvider;
|
|
36
|
+
//@internal
|
|
37
|
+
function findOptionsToJson(options, meta) {
|
|
38
|
+
return {
|
|
39
|
+
limit: options.limit,
|
|
40
|
+
page: options.page,
|
|
41
|
+
where: filter_interfaces_1.Filter.entityFilterToJson(meta, options.where),
|
|
42
|
+
orderBy: options.orderBy
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
exports.findOptionsToJson = findOptionsToJson;
|
|
46
|
+
//@internal
|
|
47
|
+
function findOptionsFromJson(json, meta) {
|
|
48
|
+
var e_1, _a;
|
|
49
|
+
var r = {};
|
|
50
|
+
try {
|
|
51
|
+
for (var _b = tslib_1.__values(["limit", "page", "where", "orderBy"]), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
52
|
+
var key = _c.value;
|
|
53
|
+
if (json[key] !== undefined) {
|
|
54
|
+
if (key === "where") {
|
|
55
|
+
r[key] = filter_interfaces_1.Filter.entityFilterFromJson(meta, json.where);
|
|
56
|
+
}
|
|
57
|
+
else
|
|
58
|
+
r[key] = json[key];
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
63
|
+
finally {
|
|
64
|
+
try {
|
|
65
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
66
|
+
}
|
|
67
|
+
finally { if (e_1) throw e_1.error; }
|
|
68
|
+
}
|
|
69
|
+
return r;
|
|
70
|
+
}
|
|
71
|
+
exports.findOptionsFromJson = findOptionsFromJson;
|
|
35
72
|
var RestEntityDataProvider = /** @class */ (function () {
|
|
36
73
|
function RestEntityDataProvider(url, http, entity) {
|
|
37
74
|
this.url = url;
|
|
@@ -39,7 +76,7 @@ var RestEntityDataProvider = /** @class */ (function () {
|
|
|
39
76
|
this.entity = entity;
|
|
40
77
|
}
|
|
41
78
|
RestEntityDataProvider.prototype.translateFromJson = function (row) {
|
|
42
|
-
var
|
|
79
|
+
var e_2, _a;
|
|
43
80
|
var result = {};
|
|
44
81
|
try {
|
|
45
82
|
for (var _b = tslib_1.__values(this.entity.fields), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
@@ -47,17 +84,17 @@ var RestEntityDataProvider = /** @class */ (function () {
|
|
|
47
84
|
result[col.key] = col.valueConverter.fromJson(row[col.key]);
|
|
48
85
|
}
|
|
49
86
|
}
|
|
50
|
-
catch (
|
|
87
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
51
88
|
finally {
|
|
52
89
|
try {
|
|
53
90
|
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
54
91
|
}
|
|
55
|
-
finally { if (
|
|
92
|
+
finally { if (e_2) throw e_2.error; }
|
|
56
93
|
}
|
|
57
94
|
return result;
|
|
58
95
|
};
|
|
59
96
|
RestEntityDataProvider.prototype.translateToJson = function (row) {
|
|
60
|
-
var
|
|
97
|
+
var e_3, _a;
|
|
61
98
|
var result = {};
|
|
62
99
|
try {
|
|
63
100
|
for (var _b = tslib_1.__values(this.entity.fields), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
@@ -65,35 +102,31 @@ var RestEntityDataProvider = /** @class */ (function () {
|
|
|
65
102
|
result[col.key] = col.valueConverter.toJson(row[col.key]);
|
|
66
103
|
}
|
|
67
104
|
}
|
|
68
|
-
catch (
|
|
105
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
69
106
|
finally {
|
|
70
107
|
try {
|
|
71
108
|
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
72
109
|
}
|
|
73
|
-
finally { if (
|
|
110
|
+
finally { if (e_3) throw e_3.error; }
|
|
74
111
|
}
|
|
75
112
|
return result;
|
|
76
113
|
};
|
|
77
114
|
RestEntityDataProvider.prototype.count = function (where) {
|
|
78
115
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
79
|
-
var
|
|
116
|
+
var run;
|
|
80
117
|
return tslib_1.__generator(this, function (_a) {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
if (where) {
|
|
84
|
-
filterObject = where.toJson();
|
|
85
|
-
if (addFilterToUrlAndReturnTrueIfSuccessful(filterObject, url))
|
|
86
|
-
filterObject = undefined;
|
|
87
|
-
}
|
|
88
|
-
if (filterObject)
|
|
89
|
-
return [2 /*return*/, this.http().post(url.url, filterObject).then(function (r) { return +(r.count); })];
|
|
90
|
-
else
|
|
91
|
-
return [2 /*return*/, this.http().get(url.url).then(function (r) { return +(r.count); })];
|
|
92
|
-
return [2 /*return*/];
|
|
118
|
+
run = this.buildFindRequest({ where: where }).run;
|
|
119
|
+
return [2 /*return*/, run("count").then(function (r) { return +r.count; })];
|
|
93
120
|
});
|
|
94
121
|
});
|
|
95
122
|
};
|
|
96
123
|
RestEntityDataProvider.prototype.find = function (options) {
|
|
124
|
+
var _this = this;
|
|
125
|
+
var run = this.buildFindRequest(options).run;
|
|
126
|
+
return run().then(function (x) { return x.map(function (y) { return _this.translateFromJson(y); }); });
|
|
127
|
+
};
|
|
128
|
+
//@internal
|
|
129
|
+
RestEntityDataProvider.prototype.buildFindRequest = function (options) {
|
|
97
130
|
var _this = this;
|
|
98
131
|
var url = new urlBuilder_1.UrlBuilder(this.url());
|
|
99
132
|
var filterObject;
|
|
@@ -122,16 +155,48 @@ var RestEntityDataProvider = /** @class */ (function () {
|
|
|
122
155
|
if (options.page)
|
|
123
156
|
url.add('_page', options.page);
|
|
124
157
|
}
|
|
125
|
-
|
|
126
|
-
url.
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
158
|
+
var run = function (action) {
|
|
159
|
+
var u = new urlBuilder_1.UrlBuilder(url.url);
|
|
160
|
+
if (!action && filterObject) {
|
|
161
|
+
action = "get";
|
|
162
|
+
}
|
|
163
|
+
if (action)
|
|
164
|
+
u.add("__action", action);
|
|
165
|
+
if (filterObject) {
|
|
166
|
+
return _this.http().post(u.url, filterObject);
|
|
167
|
+
}
|
|
168
|
+
else
|
|
169
|
+
return _this.http().get(u.url);
|
|
170
|
+
};
|
|
171
|
+
return {
|
|
172
|
+
createKey: function () { return JSON.stringify({ url: url, filterObject: filterObject }); },
|
|
173
|
+
run: run,
|
|
174
|
+
subscribe: function (queryId) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
175
|
+
var result;
|
|
176
|
+
var _this = this;
|
|
177
|
+
return tslib_1.__generator(this, function (_a) {
|
|
178
|
+
switch (_a.label) {
|
|
179
|
+
case 0: return [4 /*yield*/, run(exports.liveQueryAction + queryId)];
|
|
180
|
+
case 1:
|
|
181
|
+
result = _a.sent();
|
|
182
|
+
return [2 /*return*/, {
|
|
183
|
+
result: result,
|
|
184
|
+
unsubscribe: function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
185
|
+
var _this = this;
|
|
186
|
+
return tslib_1.__generator(this, function (_a) {
|
|
187
|
+
return [2 /*return*/, server_action_1.actionInfo.runActionWithoutBlockingUI(function () { return _this.http().post(_this.url() + "?__action=endLiveQuery", {
|
|
188
|
+
id: queryId
|
|
189
|
+
}); })];
|
|
190
|
+
});
|
|
191
|
+
}); }
|
|
192
|
+
}];
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
}); }
|
|
196
|
+
};
|
|
132
197
|
};
|
|
133
198
|
RestEntityDataProvider.prototype.update = function (id, data) {
|
|
134
|
-
var
|
|
199
|
+
var e_4, _a;
|
|
135
200
|
var _this = this;
|
|
136
201
|
var result = {};
|
|
137
202
|
var keys = Object.keys(data);
|
|
@@ -142,12 +207,12 @@ var RestEntityDataProvider = /** @class */ (function () {
|
|
|
142
207
|
result[col.key] = col.valueConverter.toJson(data[col.key]);
|
|
143
208
|
}
|
|
144
209
|
}
|
|
145
|
-
catch (
|
|
210
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
146
211
|
finally {
|
|
147
212
|
try {
|
|
148
213
|
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
149
214
|
}
|
|
150
|
-
finally { if (
|
|
215
|
+
finally { if (e_4) throw e_4.error; }
|
|
151
216
|
}
|
|
152
217
|
return this.http().put(this.url() + '/' + encodeURIComponent(id), result).then(function (y) { return _this.translateFromJson(y); });
|
|
153
218
|
};
|
|
@@ -170,7 +235,7 @@ var RestDataProviderHttpProviderUsingFetch = /** @class */ (function () {
|
|
|
170
235
|
var _this = this;
|
|
171
236
|
return tslib_1.__generator(this, function (_a) {
|
|
172
237
|
switch (_a.label) {
|
|
173
|
-
case 0: return [4 /*yield*/,
|
|
238
|
+
case 0: return [4 /*yield*/, buildRestDataProvider_1.retry(function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
174
239
|
return tslib_1.__generator(this, function (_a) {
|
|
175
240
|
return [2 /*return*/, this.myFetch(url).then(function (r) {
|
|
176
241
|
return r;
|
|
@@ -196,7 +261,7 @@ var RestDataProviderHttpProviderUsingFetch = /** @class */ (function () {
|
|
|
196
261
|
var _this = this;
|
|
197
262
|
return tslib_1.__generator(this, function (_a) {
|
|
198
263
|
switch (_a.label) {
|
|
199
|
-
case 0: return [4 /*yield*/,
|
|
264
|
+
case 0: return [4 /*yield*/, buildRestDataProvider_1.retry(function () { return _this.myFetch(url, {
|
|
200
265
|
method: 'post',
|
|
201
266
|
body: JSON.stringify(data)
|
|
202
267
|
}); })];
|
|
@@ -206,7 +271,7 @@ var RestDataProviderHttpProviderUsingFetch = /** @class */ (function () {
|
|
|
206
271
|
});
|
|
207
272
|
};
|
|
208
273
|
RestDataProviderHttpProviderUsingFetch.prototype.myFetch = function (url, options) {
|
|
209
|
-
var
|
|
274
|
+
var e_5, _a;
|
|
210
275
|
var _this = this;
|
|
211
276
|
var headers = {
|
|
212
277
|
"Content-type": "application/json"
|
|
@@ -220,12 +285,12 @@ var RestDataProviderHttpProviderUsingFetch = /** @class */ (function () {
|
|
|
220
285
|
}
|
|
221
286
|
}
|
|
222
287
|
}
|
|
223
|
-
catch (
|
|
288
|
+
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
224
289
|
finally {
|
|
225
290
|
try {
|
|
226
291
|
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
227
292
|
}
|
|
228
|
-
finally { if (
|
|
293
|
+
finally { if (e_5) throw e_5.error; }
|
|
229
294
|
}
|
|
230
295
|
return (this.fetch || fetch)(url, {
|
|
231
296
|
credentials: 'include',
|
|
@@ -282,7 +347,7 @@ function addFilterToUrlAndReturnTrueIfSuccessful(filter, url) {
|
|
|
282
347
|
if (Object.prototype.hasOwnProperty.call(filter, key)) {
|
|
283
348
|
var element = filter[key];
|
|
284
349
|
if (Array.isArray(element)) {
|
|
285
|
-
if (key.endsWith("
|
|
350
|
+
if (key.endsWith(".in"))
|
|
286
351
|
url.add(key, JSON.stringify(element));
|
|
287
352
|
else
|
|
288
353
|
element.forEach(function (e) { return url.add(key, e); });
|
|
@@ -299,3 +364,4 @@ function addFilterToUrlAndReturnTrueIfSuccessful(filter, url) {
|
|
|
299
364
|
return true;
|
|
300
365
|
}
|
|
301
366
|
exports.addFilterToUrlAndReturnTrueIfSuccessful = addFilterToUrlAndReturnTrueIfSuccessful;
|
|
367
|
+
exports.liveQueryAction = "liveQuery-";
|
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
import { EntityDataProvider, DataProvider } from "../data-interfaces";
|
|
2
|
-
import { SqlCommand, SqlImplementation, SqlResult } from "../sql-command";
|
|
2
|
+
import { SqlCommand, SqlCommandWithParameters, SqlImplementation, SqlResult } from "../sql-command";
|
|
3
3
|
import { CustomSqlFilterBuilderFunction } from "../filter/filter-consumer-bridge-to-sql-request";
|
|
4
|
-
import { EntityMetadata, EntityFilter } from "../remult3";
|
|
4
|
+
import { EntityMetadata, EntityFilter, RepositoryOverloads } from "../remult3";
|
|
5
|
+
import { Remult } from "../context";
|
|
5
6
|
export declare class SqlDatabase implements DataProvider {
|
|
6
7
|
private sql;
|
|
8
|
+
static getDb(remult?: Remult): SqlDatabase;
|
|
7
9
|
createCommand(): SqlCommand;
|
|
8
10
|
execute(sql: string): Promise<SqlResult>;
|
|
11
|
+
ensureSchema(entities: EntityMetadata<any>[]): Promise<void>;
|
|
9
12
|
getEntityDataProvider(entity: EntityMetadata): EntityDataProvider;
|
|
10
13
|
transaction(action: (dataProvider: DataProvider) => Promise<void>): Promise<void>;
|
|
11
|
-
static
|
|
14
|
+
static rawFilter(build: CustomSqlFilterBuilderFunction): EntityFilter<any>;
|
|
15
|
+
static filterToRaw<entityType>(repo: RepositoryOverloads<entityType>, condition: EntityFilter<entityType>, sqlCommand?: SqlCommandWithParameters): Promise<string>;
|
|
12
16
|
static LogToConsole: boolean;
|
|
13
17
|
static durationThreshold: number;
|
|
14
18
|
constructor(sql: SqlImplementation);
|
|
@@ -6,12 +6,20 @@ var column_1 = require("../column");
|
|
|
6
6
|
var filter_consumer_bridge_to_sql_request_1 = require("../filter/filter-consumer-bridge-to-sql-request");
|
|
7
7
|
var filter_interfaces_1 = require("../filter/filter-interfaces");
|
|
8
8
|
var sort_1 = require("../sort");
|
|
9
|
+
var remult3_1 = require("../remult3");
|
|
10
|
+
var remult_proxy_1 = require("../remult-proxy");
|
|
9
11
|
// @dynamic
|
|
10
12
|
var SqlDatabase = /** @class */ (function () {
|
|
11
13
|
function SqlDatabase(sql) {
|
|
12
14
|
this.sql = sql;
|
|
13
15
|
this.createdEntities = [];
|
|
14
16
|
}
|
|
17
|
+
SqlDatabase.getDb = function (remult) {
|
|
18
|
+
var r = (remult || remult_proxy_1.RemultProxy.defaultRemult).dataProvider;
|
|
19
|
+
if (!r.createCommand)
|
|
20
|
+
throw "the data provider is not an SqlDatabase";
|
|
21
|
+
return r;
|
|
22
|
+
};
|
|
15
23
|
SqlDatabase.prototype.createCommand = function () {
|
|
16
24
|
return new LogSQLCommand(this.sql.createCommand(), SqlDatabase.LogToConsole);
|
|
17
25
|
};
|
|
@@ -25,14 +33,33 @@ var SqlDatabase = /** @class */ (function () {
|
|
|
25
33
|
});
|
|
26
34
|
});
|
|
27
35
|
};
|
|
36
|
+
/* @internal*/
|
|
37
|
+
SqlDatabase.prototype._getSourceSql = function () {
|
|
38
|
+
return this.sql;
|
|
39
|
+
};
|
|
40
|
+
SqlDatabase.prototype.ensureSchema = function (entities) {
|
|
41
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
42
|
+
return tslib_1.__generator(this, function (_a) {
|
|
43
|
+
switch (_a.label) {
|
|
44
|
+
case 0:
|
|
45
|
+
if (!this.sql.ensureSchema) return [3 /*break*/, 2];
|
|
46
|
+
return [4 /*yield*/, this.sql.ensureSchema(entities)];
|
|
47
|
+
case 1:
|
|
48
|
+
_a.sent();
|
|
49
|
+
_a.label = 2;
|
|
50
|
+
case 2: return [2 /*return*/];
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
};
|
|
28
55
|
SqlDatabase.prototype.getEntityDataProvider = function (entity) {
|
|
29
56
|
var _this = this;
|
|
30
57
|
return new ActualSQLServerDataProvider(entity, this, function (dbName) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
31
58
|
return tslib_1.__generator(this, function (_a) {
|
|
32
59
|
switch (_a.label) {
|
|
33
60
|
case 0:
|
|
34
|
-
if (!(this.createdEntities.indexOf(dbName
|
|
35
|
-
this.createdEntities.push(dbName
|
|
61
|
+
if (!(this.createdEntities.indexOf(dbName.$entityName) < 0)) return [3 /*break*/, 2];
|
|
62
|
+
this.createdEntities.push(dbName.$entityName);
|
|
36
63
|
return [4 /*yield*/, this.sql.entityIsUsedForTheFirstTime(entity)];
|
|
37
64
|
case 1:
|
|
38
65
|
_a.sent();
|
|
@@ -83,7 +110,7 @@ var SqlDatabase = /** @class */ (function () {
|
|
|
83
110
|
});
|
|
84
111
|
}); });
|
|
85
112
|
};
|
|
86
|
-
SqlDatabase.
|
|
113
|
+
SqlDatabase.rawFilter = function (build) {
|
|
87
114
|
var _a;
|
|
88
115
|
return _a = {},
|
|
89
116
|
_a[filter_interfaces_1.customDatabaseFilterToken] = {
|
|
@@ -91,6 +118,32 @@ var SqlDatabase = /** @class */ (function () {
|
|
|
91
118
|
},
|
|
92
119
|
_a;
|
|
93
120
|
};
|
|
121
|
+
SqlDatabase.filterToRaw = function (repo, condition, sqlCommand) {
|
|
122
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
123
|
+
var r, b, _a, _b;
|
|
124
|
+
return tslib_1.__generator(this, function (_c) {
|
|
125
|
+
switch (_c.label) {
|
|
126
|
+
case 0:
|
|
127
|
+
if (!sqlCommand) {
|
|
128
|
+
sqlCommand = new myDummySQLCommand();
|
|
129
|
+
}
|
|
130
|
+
r = remult3_1.getRepository(repo);
|
|
131
|
+
_a = filter_consumer_bridge_to_sql_request_1.FilterConsumerBridgeToSqlRequest.bind;
|
|
132
|
+
_b = [void 0, sqlCommand];
|
|
133
|
+
return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.dbNamesOf(r.metadata)];
|
|
134
|
+
case 1:
|
|
135
|
+
b = new (_a.apply(filter_consumer_bridge_to_sql_request_1.FilterConsumerBridgeToSqlRequest, _b.concat([_c.sent()])))();
|
|
136
|
+
b._addWhere = false;
|
|
137
|
+
return [4 /*yield*/, (r.translateWhereToFilter(condition))];
|
|
138
|
+
case 2: return [4 /*yield*/, (_c.sent()).__applyToConsumer(b)];
|
|
139
|
+
case 3:
|
|
140
|
+
_c.sent();
|
|
141
|
+
return [4 /*yield*/, b.resolveWhere()];
|
|
142
|
+
case 4: return [2 /*return*/, _c.sent()];
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
};
|
|
94
147
|
SqlDatabase.LogToConsole = false;
|
|
95
148
|
SqlDatabase.durationThreshold = 0;
|
|
96
149
|
return SqlDatabase;
|
|
@@ -121,7 +174,7 @@ var LogSQLCommand = /** @class */ (function () {
|
|
|
121
174
|
if (this.allQueries) {
|
|
122
175
|
d = new Date().valueOf() - start.valueOf();
|
|
123
176
|
if (d > SqlDatabase.durationThreshold) {
|
|
124
|
-
console.
|
|
177
|
+
console.info({ query: sql, arguments: this.args, duration: d / 1000 });
|
|
125
178
|
}
|
|
126
179
|
}
|
|
127
180
|
return [2 /*return*/, r];
|
|
@@ -148,7 +201,7 @@ var ActualSQLServerDataProvider = /** @class */ (function () {
|
|
|
148
201
|
var dbNameProvider;
|
|
149
202
|
return tslib_1.__generator(this, function (_a) {
|
|
150
203
|
switch (_a.label) {
|
|
151
|
-
case 0: return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.
|
|
204
|
+
case 0: return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.dbNamesOf(this.entity)];
|
|
152
205
|
case 1:
|
|
153
206
|
dbNameProvider = _a.sent();
|
|
154
207
|
return [4 /*yield*/, this.iAmUsed(dbNameProvider)];
|
|
@@ -167,7 +220,7 @@ var ActualSQLServerDataProvider = /** @class */ (function () {
|
|
|
167
220
|
case 0: return [4 /*yield*/, this.init()];
|
|
168
221
|
case 1:
|
|
169
222
|
e = _b.sent();
|
|
170
|
-
select = 'select count(*) count from ' + e
|
|
223
|
+
select = 'select count(*) count from ' + e.$entityName;
|
|
171
224
|
r = this.sql.createCommand();
|
|
172
225
|
if (!where) return [3 /*break*/, 3];
|
|
173
226
|
wc = new filter_consumer_bridge_to_sql_request_1.FilterConsumerBridgeToSqlRequest(r, e);
|
|
@@ -196,7 +249,7 @@ var ActualSQLServerDataProvider = /** @class */ (function () {
|
|
|
196
249
|
e = _g.sent();
|
|
197
250
|
_a = this.buildSelect(e), colKeys = _a.colKeys, select = _a.select;
|
|
198
251
|
select = 'select ' + select;
|
|
199
|
-
select += '\n from ' + e
|
|
252
|
+
select += '\n from ' + e.$entityName;
|
|
200
253
|
r = this.sql.createCommand();
|
|
201
254
|
if (!options) return [3 /*break*/, 4];
|
|
202
255
|
if (!options.where) return [3 /*break*/, 3];
|
|
@@ -246,7 +299,7 @@ var ActualSQLServerDataProvider = /** @class */ (function () {
|
|
|
246
299
|
}
|
|
247
300
|
else
|
|
248
301
|
select += ', ';
|
|
249
|
-
select += e
|
|
302
|
+
select += e.$dbNameOf(c.field);
|
|
250
303
|
if (c.isDescending)
|
|
251
304
|
select += ' desc';
|
|
252
305
|
}
|
|
@@ -302,7 +355,7 @@ var ActualSQLServerDataProvider = /** @class */ (function () {
|
|
|
302
355
|
else {
|
|
303
356
|
if (colKeys.length > 0)
|
|
304
357
|
select += ', ';
|
|
305
|
-
select += e
|
|
358
|
+
select += e.$dbNameOf(x);
|
|
306
359
|
colKeys.push(x);
|
|
307
360
|
}
|
|
308
361
|
}
|
|
@@ -329,14 +382,14 @@ var ActualSQLServerDataProvider = /** @class */ (function () {
|
|
|
329
382
|
r = this.sql.createCommand();
|
|
330
383
|
f = new filter_consumer_bridge_to_sql_request_1.FilterConsumerBridgeToSqlRequest(r, e);
|
|
331
384
|
filter_interfaces_1.Filter.fromEntityFilter(this.entity, this.entity.idMetadata.getIdFilter(id)).__applyToConsumer(f);
|
|
332
|
-
statement = 'update ' + e
|
|
385
|
+
statement = 'update ' + e.$entityName + ' set ';
|
|
333
386
|
added = false;
|
|
334
387
|
try {
|
|
335
388
|
for (_a = tslib_1.__values(this.entity.fields), _b = _a.next(); !_b.done; _b = _a.next()) {
|
|
336
389
|
x = _b.value;
|
|
337
390
|
if (x instanceof column_1.CompoundIdField) {
|
|
338
391
|
}
|
|
339
|
-
if (
|
|
392
|
+
if (filter_consumer_bridge_to_sql_request_1.isDbReadonly(x, e)) { }
|
|
340
393
|
else if (data[x.key] !== undefined) {
|
|
341
394
|
v = x.valueConverter.toDb(data[x.key]);
|
|
342
395
|
if (v !== undefined) {
|
|
@@ -344,7 +397,7 @@ var ActualSQLServerDataProvider = /** @class */ (function () {
|
|
|
344
397
|
added = true;
|
|
345
398
|
else
|
|
346
399
|
statement += ', ';
|
|
347
|
-
statement += e
|
|
400
|
+
statement += e.$dbNameOf(x) + ' = ' + r.addParameterAndReturnSqlToken(v);
|
|
348
401
|
}
|
|
349
402
|
}
|
|
350
403
|
}
|
|
@@ -380,7 +433,7 @@ var ActualSQLServerDataProvider = /** @class */ (function () {
|
|
|
380
433
|
r = this.sql.createCommand();
|
|
381
434
|
f = new filter_consumer_bridge_to_sql_request_1.FilterConsumerBridgeToSqlRequest(r, e);
|
|
382
435
|
filter_interfaces_1.Filter.fromEntityFilter(this.entity, this.entity.idMetadata.getIdFilter(id)).__applyToConsumer(f);
|
|
383
|
-
statement = 'delete from ' + e
|
|
436
|
+
statement = 'delete from ' + e.$entityName;
|
|
384
437
|
_a = statement;
|
|
385
438
|
return [4 /*yield*/, f.resolveWhere()];
|
|
386
439
|
case 2:
|
|
@@ -407,7 +460,7 @@ var ActualSQLServerDataProvider = /** @class */ (function () {
|
|
|
407
460
|
try {
|
|
408
461
|
for (_a = tslib_1.__values(this.entity.fields), _b = _a.next(); !_b.done; _b = _a.next()) {
|
|
409
462
|
x = _b.value;
|
|
410
|
-
if (
|
|
463
|
+
if (filter_consumer_bridge_to_sql_request_1.isDbReadonly(x, e)) { }
|
|
411
464
|
else {
|
|
412
465
|
v = x.valueConverter.toDb(data[x.key]);
|
|
413
466
|
if (v != undefined) {
|
|
@@ -417,7 +470,7 @@ var ActualSQLServerDataProvider = /** @class */ (function () {
|
|
|
417
470
|
cols += ', ';
|
|
418
471
|
vals += ', ';
|
|
419
472
|
}
|
|
420
|
-
cols += e
|
|
473
|
+
cols += e.$dbNameOf(x);
|
|
421
474
|
vals += r.addParameterAndReturnSqlToken(v);
|
|
422
475
|
}
|
|
423
476
|
}
|
|
@@ -430,7 +483,7 @@ var ActualSQLServerDataProvider = /** @class */ (function () {
|
|
|
430
483
|
}
|
|
431
484
|
finally { if (e_5) throw e_5.error; }
|
|
432
485
|
}
|
|
433
|
-
statement = "insert into " + e
|
|
486
|
+
statement = "insert into " + e.$entityName + " (" + cols + ") values (" + vals + ")";
|
|
434
487
|
_c = this.buildSelect(e), colKeys = _c.colKeys, select = _c.select;
|
|
435
488
|
statement += ' returning ' + select;
|
|
436
489
|
return [4 /*yield*/, r.execute(statement).then(function (sql) { return _this.buildResultRow(colKeys, sql.rows[0], sql); })];
|
|
@@ -442,3 +495,23 @@ var ActualSQLServerDataProvider = /** @class */ (function () {
|
|
|
442
495
|
ActualSQLServerDataProvider.LogToConsole = false;
|
|
443
496
|
return ActualSQLServerDataProvider;
|
|
444
497
|
}());
|
|
498
|
+
var myDummySQLCommand = /** @class */ (function () {
|
|
499
|
+
function myDummySQLCommand() {
|
|
500
|
+
}
|
|
501
|
+
myDummySQLCommand.prototype.execute = function (sql) {
|
|
502
|
+
throw new Error("Method not implemented.");
|
|
503
|
+
};
|
|
504
|
+
myDummySQLCommand.prototype.addParameterAndReturnSqlToken = function (val) {
|
|
505
|
+
if (val === null)
|
|
506
|
+
return "null";
|
|
507
|
+
if (val instanceof Date)
|
|
508
|
+
val = val.toISOString();
|
|
509
|
+
if (typeof (val) == "string") {
|
|
510
|
+
if (val == undefined)
|
|
511
|
+
val = '';
|
|
512
|
+
return '\'' + val.replace(/'/g, '\'\'') + '\'';
|
|
513
|
+
}
|
|
514
|
+
return val.toString();
|
|
515
|
+
};
|
|
516
|
+
return myDummySQLCommand;
|
|
517
|
+
}());
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import { __RowsOfDataForTesting } from "../__RowsOfDataForTesting";
|
|
2
2
|
import { SqlCommand, SqlImplementation } from "../sql-command";
|
|
3
3
|
import { EntityMetadata } from "../remult3";
|
|
4
|
+
import { Remult } from "../context";
|
|
4
5
|
export declare class WebSqlDataProvider implements SqlImplementation, __RowsOfDataForTesting {
|
|
5
6
|
private databaseName;
|
|
6
7
|
rows: {
|
|
7
8
|
[tableName: string]: any;
|
|
8
9
|
};
|
|
9
10
|
constructor(databaseName: string, databaseSize?: number);
|
|
11
|
+
static getDb(remult?: Remult): any;
|
|
10
12
|
getLimitSqlSyntax(limit: number, offset: number): string;
|
|
11
13
|
entityIsUsedForTheFirstTime(entity: EntityMetadata): Promise<void>;
|
|
14
|
+
ensureSchema(entities: EntityMetadata<any>[]): Promise<void>;
|
|
12
15
|
dropTable(entity: EntityMetadata): Promise<void>;
|
|
13
16
|
createTable(entity: EntityMetadata<any>): Promise<void>;
|
|
14
17
|
createCommand(): SqlCommand;
|