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
package/remult-knex/index.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createKnexDataProvider = exports.buildColumn = exports.KnexSchemaBuilder = exports.
|
|
3
|
+
exports.createKnexDataProvider = exports.buildColumn = exports.KnexSchemaBuilder = exports.KnexDataProvider = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
|
-
var knex_1 = require("knex");
|
|
6
5
|
var filter_interfaces_1 = require("../src/filter/filter-interfaces");
|
|
7
6
|
var filter_consumer_bridge_to_sql_request_1 = require("../src/filter/filter-consumer-bridge-to-sql-request");
|
|
8
7
|
var context_1 = require("../src/context");
|
|
@@ -10,10 +9,17 @@ var remult3_1 = require("../src/remult3");
|
|
|
10
9
|
var valueConverters_1 = require("../src/valueConverters");
|
|
11
10
|
var column_1 = require("../src/column");
|
|
12
11
|
var sort_1 = require("../src/sort");
|
|
12
|
+
var remult_proxy_1 = require("../src/remult-proxy");
|
|
13
13
|
var KnexDataProvider = /** @class */ (function () {
|
|
14
14
|
function KnexDataProvider(knex) {
|
|
15
15
|
this.knex = knex;
|
|
16
16
|
}
|
|
17
|
+
KnexDataProvider.getDb = function (remult) {
|
|
18
|
+
var r = (remult || remult_proxy_1.remult).dataProvider;
|
|
19
|
+
if (!r.knex)
|
|
20
|
+
throw "the data provider is not an KnexDataProvider";
|
|
21
|
+
return r.knex;
|
|
22
|
+
};
|
|
17
23
|
KnexDataProvider.prototype.getEntityDataProvider = function (entity) {
|
|
18
24
|
return new KnexEntityDataProvider(entity, this.knex);
|
|
19
25
|
};
|
|
@@ -46,7 +52,7 @@ var KnexDataProvider = /** @class */ (function () {
|
|
|
46
52
|
});
|
|
47
53
|
});
|
|
48
54
|
};
|
|
49
|
-
KnexDataProvider.
|
|
55
|
+
KnexDataProvider.rawFilter = function (build) {
|
|
50
56
|
var _a;
|
|
51
57
|
return _a = {},
|
|
52
58
|
_a[filter_interfaces_1.customDatabaseFilterToken] = {
|
|
@@ -54,6 +60,45 @@ var KnexDataProvider = /** @class */ (function () {
|
|
|
54
60
|
},
|
|
55
61
|
_a;
|
|
56
62
|
};
|
|
63
|
+
KnexDataProvider.filterToRaw = function (entity, condition) {
|
|
64
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
65
|
+
var repo, b, _a, r;
|
|
66
|
+
return tslib_1.__generator(this, function (_b) {
|
|
67
|
+
switch (_b.label) {
|
|
68
|
+
case 0:
|
|
69
|
+
repo = remult3_1.getRepository(entity);
|
|
70
|
+
_a = FilterConsumerBridgeToKnexRequest.bind;
|
|
71
|
+
return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.dbNamesOf(repo.metadata)];
|
|
72
|
+
case 1:
|
|
73
|
+
b = new (_a.apply(FilterConsumerBridgeToKnexRequest, [void 0, _b.sent()]))();
|
|
74
|
+
b._addWhere = false;
|
|
75
|
+
return [4 /*yield*/, (repo.translateWhereToFilter(condition))];
|
|
76
|
+
case 2: return [4 /*yield*/, (_b.sent()).__applyToConsumer(b)];
|
|
77
|
+
case 3:
|
|
78
|
+
_b.sent();
|
|
79
|
+
return [4 /*yield*/, b.resolveWhere()];
|
|
80
|
+
case 4:
|
|
81
|
+
r = _b.sent();
|
|
82
|
+
return [2 /*return*/, function (knex) { return r.forEach(function (y) { return y(knex); }); }];
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
KnexDataProvider.prototype.ensureSchema = function (entities) {
|
|
88
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
89
|
+
var sb;
|
|
90
|
+
return tslib_1.__generator(this, function (_a) {
|
|
91
|
+
switch (_a.label) {
|
|
92
|
+
case 0:
|
|
93
|
+
sb = new KnexSchemaBuilder(this.knex);
|
|
94
|
+
return [4 /*yield*/, sb.ensureSchema(entities)];
|
|
95
|
+
case 1:
|
|
96
|
+
_a.sent();
|
|
97
|
+
return [2 /*return*/];
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
};
|
|
57
102
|
return KnexDataProvider;
|
|
58
103
|
}());
|
|
59
104
|
exports.KnexDataProvider = KnexDataProvider;
|
|
@@ -75,7 +120,7 @@ var KnexEntityDataProvider = /** @class */ (function () {
|
|
|
75
120
|
return [4 /*yield*/, br.resolveWhere()];
|
|
76
121
|
case 2:
|
|
77
122
|
r = _a.sent();
|
|
78
|
-
return [4 /*yield*/, this.knex(e
|
|
123
|
+
return [4 /*yield*/, this.knex(e.$entityName)
|
|
79
124
|
.count().where(function (b) { return r.forEach(function (w) { return w(b); }); })];
|
|
80
125
|
case 3:
|
|
81
126
|
result = (_a.sent());
|
|
@@ -108,7 +153,7 @@ var KnexEntityDataProvider = /** @class */ (function () {
|
|
|
108
153
|
if (x.isServerExpression) {
|
|
109
154
|
}
|
|
110
155
|
else {
|
|
111
|
-
cols.push(e
|
|
156
|
+
cols.push(e.$dbNameOf(x));
|
|
112
157
|
colKeys.push(x);
|
|
113
158
|
}
|
|
114
159
|
}
|
|
@@ -120,7 +165,7 @@ var KnexEntityDataProvider = /** @class */ (function () {
|
|
|
120
165
|
}
|
|
121
166
|
finally { if (e_1) throw e_1.error; }
|
|
122
167
|
}
|
|
123
|
-
query = this.knex(e
|
|
168
|
+
query = this.knex(e.$entityName).select(cols);
|
|
124
169
|
if (!(options === null || options === void 0 ? void 0 : options.where)) return [3 /*break*/, 3];
|
|
125
170
|
br = new FilterConsumerBridgeToKnexRequest(e);
|
|
126
171
|
options.where.__applyToConsumer(br);
|
|
@@ -135,7 +180,7 @@ var KnexEntityDataProvider = /** @class */ (function () {
|
|
|
135
180
|
}
|
|
136
181
|
if (options.orderBy) {
|
|
137
182
|
query = query.orderBy(options.orderBy.Segments.map(function (s) { return ({
|
|
138
|
-
column: e
|
|
183
|
+
column: e.$dbNameOf(s.field),
|
|
139
184
|
order: s.isDescending ? "desc" : "asc"
|
|
140
185
|
}); }));
|
|
141
186
|
}
|
|
@@ -169,7 +214,7 @@ var KnexEntityDataProvider = /** @class */ (function () {
|
|
|
169
214
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
170
215
|
return tslib_1.__generator(this, function (_a) {
|
|
171
216
|
switch (_a.label) {
|
|
172
|
-
case 0: return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.
|
|
217
|
+
case 0: return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.dbNamesOf(this.entity)];
|
|
173
218
|
case 1: return [2 /*return*/, _a.sent()];
|
|
174
219
|
}
|
|
175
220
|
});
|
|
@@ -198,13 +243,13 @@ var KnexEntityDataProvider = /** @class */ (function () {
|
|
|
198
243
|
case 3:
|
|
199
244
|
if (!!_b.done) return [3 /*break*/, 7];
|
|
200
245
|
x = _b.value;
|
|
201
|
-
if (!
|
|
246
|
+
if (!filter_consumer_bridge_to_sql_request_1.isDbReadonly(x, e)) return [3 /*break*/, 4];
|
|
202
247
|
return [3 /*break*/, 6];
|
|
203
248
|
case 4:
|
|
204
249
|
if (!(data[x.key] !== undefined)) return [3 /*break*/, 6];
|
|
205
250
|
v = x.valueConverter.toDb(data[x.key]);
|
|
206
251
|
if (!(v !== undefined)) return [3 /*break*/, 6];
|
|
207
|
-
return [4 /*yield*/, e
|
|
252
|
+
return [4 /*yield*/, e.$dbNameOf(x)];
|
|
208
253
|
case 5:
|
|
209
254
|
key = _d.sent();
|
|
210
255
|
updateObject[key] = v;
|
|
@@ -226,7 +271,7 @@ var KnexEntityDataProvider = /** @class */ (function () {
|
|
|
226
271
|
case 10: return [4 /*yield*/, f.resolveWhere()];
|
|
227
272
|
case 11:
|
|
228
273
|
where = _d.sent();
|
|
229
|
-
return [4 /*yield*/, this.knex(e
|
|
274
|
+
return [4 /*yield*/, this.knex(e.$entityName).update(updateObject).where(function (b) { return where.forEach(function (w) { return w(b); }); })];
|
|
230
275
|
case 12:
|
|
231
276
|
_d.sent();
|
|
232
277
|
return [2 /*return*/, this.find({ where: filter_interfaces_1.Filter.fromEntityFilter(this.entity, resultFilter) }).then(function (y) { return y[0]; })];
|
|
@@ -247,7 +292,7 @@ var KnexEntityDataProvider = /** @class */ (function () {
|
|
|
247
292
|
return [4 /*yield*/, f.resolveWhere()];
|
|
248
293
|
case 2:
|
|
249
294
|
where = _a.sent();
|
|
250
|
-
return [4 /*yield*/, this.knex(e
|
|
295
|
+
return [4 /*yield*/, this.knex(e.$entityName).delete().where(function (b) { return where.forEach(function (w) { return w(b); }); })];
|
|
251
296
|
case 3:
|
|
252
297
|
_a.sent();
|
|
253
298
|
return [2 /*return*/];
|
|
@@ -278,12 +323,12 @@ var KnexEntityDataProvider = /** @class */ (function () {
|
|
|
278
323
|
case 3:
|
|
279
324
|
if (!!_b.done) return [3 /*break*/, 7];
|
|
280
325
|
x = _b.value;
|
|
281
|
-
if (!
|
|
326
|
+
if (!filter_consumer_bridge_to_sql_request_1.isDbReadonly(x, e)) return [3 /*break*/, 4];
|
|
282
327
|
return [3 /*break*/, 6];
|
|
283
328
|
case 4:
|
|
284
329
|
v = x.valueConverter.toDb(data[x.key]);
|
|
285
330
|
if (!(v != undefined)) return [3 /*break*/, 6];
|
|
286
|
-
return [4 /*yield*/, e
|
|
331
|
+
return [4 /*yield*/, e.$dbNameOf(x)];
|
|
287
332
|
case 5:
|
|
288
333
|
key = _d.sent();
|
|
289
334
|
insertObject[key] = v;
|
|
@@ -303,7 +348,7 @@ var KnexEntityDataProvider = /** @class */ (function () {
|
|
|
303
348
|
finally { if (e_3) throw e_3.error; }
|
|
304
349
|
return [7 /*endfinally*/];
|
|
305
350
|
case 10:
|
|
306
|
-
insert = this.knex(e
|
|
351
|
+
insert = this.knex(e.$entityName).insert(insertObject);
|
|
307
352
|
if (!remult3_1.isAutoIncrement(this.entity.idMetadata.field)) return [3 /*break*/, 15];
|
|
308
353
|
if (!(this.knex.client.config.client === 'mysql2')) return [3 /*break*/, 12];
|
|
309
354
|
return [4 /*yield*/, insert];
|
|
@@ -457,16 +502,16 @@ var FilterConsumerBridgeToKnexRequest = /** @class */ (function () {
|
|
|
457
502
|
};
|
|
458
503
|
FilterConsumerBridgeToKnexRequest.prototype.isNull = function (col) {
|
|
459
504
|
var _this = this;
|
|
460
|
-
this.result.push(function (b) { return b.whereNull(_this.nameProvider
|
|
505
|
+
this.result.push(function (b) { return b.whereNull(_this.nameProvider.$dbNameOf(col)); });
|
|
461
506
|
};
|
|
462
507
|
FilterConsumerBridgeToKnexRequest.prototype.isNotNull = function (col) {
|
|
463
508
|
var _this = this;
|
|
464
|
-
this.result.push(function (b) { return b.whereNotNull(_this.nameProvider
|
|
509
|
+
this.result.push(function (b) { return b.whereNotNull(_this.nameProvider.$dbNameOf(col)); });
|
|
465
510
|
};
|
|
466
511
|
FilterConsumerBridgeToKnexRequest.prototype.isIn = function (col, val) {
|
|
467
512
|
var _this = this;
|
|
468
513
|
this.result.push(function (knex) {
|
|
469
|
-
return knex.whereIn(_this.nameProvider
|
|
514
|
+
return knex.whereIn(_this.nameProvider.$dbNameOf(col), val.map(function (x) { return col.valueConverter.toDb(x); }));
|
|
470
515
|
});
|
|
471
516
|
};
|
|
472
517
|
FilterConsumerBridgeToKnexRequest.prototype.isEqualTo = function (col, val) {
|
|
@@ -489,7 +534,7 @@ var FilterConsumerBridgeToKnexRequest = /** @class */ (function () {
|
|
|
489
534
|
};
|
|
490
535
|
FilterConsumerBridgeToKnexRequest.prototype.containsCaseInsensitive = function (col, val) {
|
|
491
536
|
var _this = this;
|
|
492
|
-
this.result.push(function (b) { return b.whereRaw('lower (' + _this.nameProvider
|
|
537
|
+
this.result.push(function (b) { return b.whereRaw('lower (' + _this.nameProvider.$dbNameOf(col) + ") like lower ('%" + val.replace(/'/g, '\'\'') + "%')"); });
|
|
493
538
|
this.promises.push((function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
494
539
|
return tslib_1.__generator(this, function (_a) {
|
|
495
540
|
return [2 /*return*/];
|
|
@@ -498,7 +543,7 @@ var FilterConsumerBridgeToKnexRequest = /** @class */ (function () {
|
|
|
498
543
|
};
|
|
499
544
|
FilterConsumerBridgeToKnexRequest.prototype.add = function (col, val, operator) {
|
|
500
545
|
var _this = this;
|
|
501
|
-
this.result.push(function (b) { return b.where(_this.nameProvider
|
|
546
|
+
this.result.push(function (b) { return b.where(_this.nameProvider.$dbNameOf(col), operator, col.valueConverter.toDb(val)); });
|
|
502
547
|
};
|
|
503
548
|
FilterConsumerBridgeToKnexRequest.prototype.databaseCustom = function (databaseCustom) {
|
|
504
549
|
var _this = this;
|
|
@@ -520,7 +565,6 @@ var FilterConsumerBridgeToKnexRequest = /** @class */ (function () {
|
|
|
520
565
|
};
|
|
521
566
|
return FilterConsumerBridgeToKnexRequest;
|
|
522
567
|
}());
|
|
523
|
-
exports.FilterConsumerBridgeToKnexRequest = FilterConsumerBridgeToKnexRequest;
|
|
524
568
|
var KnexSchemaBuilder = /** @class */ (function () {
|
|
525
569
|
function KnexSchemaBuilder(knex) {
|
|
526
570
|
this.knex = knex;
|
|
@@ -528,59 +572,64 @@ var KnexSchemaBuilder = /** @class */ (function () {
|
|
|
528
572
|
}
|
|
529
573
|
KnexSchemaBuilder.prototype.verifyStructureOfAllEntities = function (remult) {
|
|
530
574
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
531
|
-
var
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
575
|
+
var entities;
|
|
576
|
+
return tslib_1.__generator(this, function (_a) {
|
|
577
|
+
if (!remult)
|
|
578
|
+
remult = remult_proxy_1.RemultProxy.defaultRemult;
|
|
579
|
+
entities = context_1.allEntities.map(function (x) { return remult.repo(x).metadata; });
|
|
580
|
+
this.ensureSchema(entities);
|
|
581
|
+
return [2 /*return*/];
|
|
582
|
+
});
|
|
583
|
+
});
|
|
584
|
+
};
|
|
585
|
+
KnexSchemaBuilder.prototype.ensureSchema = function (entities) {
|
|
586
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
587
|
+
var entities_1, entities_1_1, entity, e, err_2, e_6_1;
|
|
588
|
+
var e_6, _a;
|
|
589
|
+
return tslib_1.__generator(this, function (_b) {
|
|
590
|
+
switch (_b.label) {
|
|
535
591
|
case 0:
|
|
536
|
-
|
|
537
|
-
|
|
592
|
+
_b.trys.push([0, 10, 11, 12]);
|
|
593
|
+
entities_1 = tslib_1.__values(entities), entities_1_1 = entities_1.next();
|
|
594
|
+
_b.label = 1;
|
|
538
595
|
case 1:
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
596
|
+
if (!!entities_1_1.done) return [3 /*break*/, 9];
|
|
597
|
+
entity = entities_1_1.value;
|
|
598
|
+
return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.dbNamesOf(entity)];
|
|
542
599
|
case 2:
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
metadata = remult.repo(entity).metadata;
|
|
546
|
-
_e.label = 3;
|
|
600
|
+
e = _b.sent();
|
|
601
|
+
_b.label = 3;
|
|
547
602
|
case 3:
|
|
548
|
-
|
|
549
|
-
if (!!
|
|
550
|
-
return [
|
|
603
|
+
_b.trys.push([3, 7, , 8]);
|
|
604
|
+
if (!!entity.options.sqlExpression) return [3 /*break*/, 6];
|
|
605
|
+
if (!(e.$entityName.toLowerCase().indexOf('from ') < 0)) return [3 /*break*/, 6];
|
|
606
|
+
return [4 /*yield*/, this.createIfNotExist(entity)];
|
|
551
607
|
case 4:
|
|
552
|
-
|
|
553
|
-
return [4 /*yield*/, this.
|
|
608
|
+
_b.sent();
|
|
609
|
+
return [4 /*yield*/, this.verifyAllColumns(entity)];
|
|
554
610
|
case 5:
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
case 6:
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
611
|
+
_b.sent();
|
|
612
|
+
_b.label = 6;
|
|
613
|
+
case 6: return [3 /*break*/, 8];
|
|
614
|
+
case 7:
|
|
615
|
+
err_2 = _b.sent();
|
|
616
|
+
console.error("failed ensure schema of " + e.$entityName + " ", err_2);
|
|
617
|
+
return [3 /*break*/, 8];
|
|
561
618
|
case 8:
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
return [4 /*yield*/, metadata.getDbName()];
|
|
566
|
-
case 9:
|
|
567
|
-
_b.apply(_a, [_c + (_e.sent()) + " ", err_2]);
|
|
568
|
-
return [3 /*break*/, 10];
|
|
619
|
+
entities_1_1 = entities_1.next();
|
|
620
|
+
return [3 /*break*/, 1];
|
|
621
|
+
case 9: return [3 /*break*/, 12];
|
|
569
622
|
case 10:
|
|
570
|
-
|
|
571
|
-
return [3 /*break*/, 2];
|
|
572
|
-
case 11: return [3 /*break*/, 14];
|
|
573
|
-
case 12:
|
|
574
|
-
e_6_1 = _e.sent();
|
|
623
|
+
e_6_1 = _b.sent();
|
|
575
624
|
e_6 = { error: e_6_1 };
|
|
576
|
-
return [3 /*break*/,
|
|
577
|
-
case
|
|
625
|
+
return [3 /*break*/, 12];
|
|
626
|
+
case 11:
|
|
578
627
|
try {
|
|
579
|
-
if (
|
|
628
|
+
if (entities_1_1 && !entities_1_1.done && (_a = entities_1.return)) _a.call(entities_1);
|
|
580
629
|
}
|
|
581
630
|
finally { if (e_6) throw e_6.error; }
|
|
582
631
|
return [7 /*endfinally*/];
|
|
583
|
-
case
|
|
632
|
+
case 12: return [2 /*return*/];
|
|
584
633
|
}
|
|
585
634
|
});
|
|
586
635
|
});
|
|
@@ -591,10 +640,10 @@ var KnexSchemaBuilder = /** @class */ (function () {
|
|
|
591
640
|
var e_7, _c;
|
|
592
641
|
return tslib_1.__generator(this, function (_d) {
|
|
593
642
|
switch (_d.label) {
|
|
594
|
-
case 0: return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.
|
|
643
|
+
case 0: return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.dbNamesOf(entity)];
|
|
595
644
|
case 1:
|
|
596
645
|
e = _d.sent();
|
|
597
|
-
return [4 /*yield*/, this.knex.schema.hasTable(e
|
|
646
|
+
return [4 /*yield*/, this.knex.schema.hasTable(e.$entityName)];
|
|
598
647
|
case 2:
|
|
599
648
|
if (!!(_d.sent())) return [3 /*break*/, 4];
|
|
600
649
|
cols_1 = new Map();
|
|
@@ -602,8 +651,8 @@ var KnexSchemaBuilder = /** @class */ (function () {
|
|
|
602
651
|
for (_a = tslib_1.__values(entity.fields), _b = _a.next(); !_b.done; _b = _a.next()) {
|
|
603
652
|
f = _b.value;
|
|
604
653
|
cols_1.set(f, {
|
|
605
|
-
name: e
|
|
606
|
-
readonly:
|
|
654
|
+
name: e.$dbNameOf(f),
|
|
655
|
+
readonly: filter_consumer_bridge_to_sql_request_1.isDbReadonly(f, e)
|
|
607
656
|
});
|
|
608
657
|
}
|
|
609
658
|
}
|
|
@@ -614,7 +663,7 @@ var KnexSchemaBuilder = /** @class */ (function () {
|
|
|
614
663
|
}
|
|
615
664
|
finally { if (e_7) throw e_7.error; }
|
|
616
665
|
}
|
|
617
|
-
return [4 /*yield*/, logSql(this.knex.schema.createTable(e
|
|
666
|
+
return [4 /*yield*/, logSql(this.knex.schema.createTable(e.$entityName, function (b) {
|
|
618
667
|
var e_8, _a;
|
|
619
668
|
try {
|
|
620
669
|
for (var _b = tslib_1.__values(entity.fields), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
@@ -651,19 +700,19 @@ var KnexSchemaBuilder = /** @class */ (function () {
|
|
|
651
700
|
var e, col, colName;
|
|
652
701
|
return tslib_1.__generator(this, function (_a) {
|
|
653
702
|
switch (_a.label) {
|
|
654
|
-
case 0: return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.
|
|
703
|
+
case 0: return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.dbNamesOf(entity)];
|
|
655
704
|
case 1:
|
|
656
705
|
e = _a.sent();
|
|
657
|
-
if (
|
|
706
|
+
if (filter_consumer_bridge_to_sql_request_1.isDbReadonly(c(entity), e))
|
|
658
707
|
return [2 /*return*/];
|
|
659
708
|
col = c(entity);
|
|
660
|
-
colName = e
|
|
661
|
-
return [4 /*yield*/, this.knex.schema.hasColumn(e
|
|
709
|
+
colName = e.$dbNameOf(col);
|
|
710
|
+
return [4 /*yield*/, this.knex.schema.hasColumn(e.$entityName, colName)];
|
|
662
711
|
case 2:
|
|
663
712
|
if (!!(_a.sent())) return [3 /*break*/, 4];
|
|
664
|
-
return [4 /*yield*/, this.knex.schema.alterTable(e
|
|
713
|
+
return [4 /*yield*/, logSql(this.knex.schema.alterTable(e.$entityName, function (b) {
|
|
665
714
|
buildColumn(col, colName, b);
|
|
666
|
-
})];
|
|
715
|
+
}))];
|
|
667
716
|
case 3:
|
|
668
717
|
_a.sent();
|
|
669
718
|
_a.label = 4;
|
|
@@ -678,7 +727,7 @@ var KnexSchemaBuilder = /** @class */ (function () {
|
|
|
678
727
|
var e_9, _c;
|
|
679
728
|
return tslib_1.__generator(this, function (_d) {
|
|
680
729
|
switch (_d.label) {
|
|
681
|
-
case 0: return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.
|
|
730
|
+
case 0: return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.dbNamesOf(entity)];
|
|
682
731
|
case 1:
|
|
683
732
|
e = _d.sent();
|
|
684
733
|
_d.label = 2;
|
|
@@ -688,7 +737,7 @@ var KnexSchemaBuilder = /** @class */ (function () {
|
|
|
688
737
|
return tslib_1.__generator(this, function (_a) {
|
|
689
738
|
switch (_a.label) {
|
|
690
739
|
case 0:
|
|
691
|
-
if (!!
|
|
740
|
+
if (!!filter_consumer_bridge_to_sql_request_1.isDbReadonly(col, e)) return [3 /*break*/, 2];
|
|
692
741
|
return [4 /*yield*/, this_2.addColumnIfNotExist(entity, function () { return col; })];
|
|
693
742
|
case 1:
|
|
694
743
|
_a.sent();
|
|
@@ -701,7 +750,7 @@ var KnexSchemaBuilder = /** @class */ (function () {
|
|
|
701
750
|
_d.label = 3;
|
|
702
751
|
case 3:
|
|
703
752
|
_d.trys.push([3, 8, 9, 10]);
|
|
704
|
-
_a = tslib_1.__values(entity.fields), _b = _a.next();
|
|
753
|
+
_a = tslib_1.__values(entity.fields.toArray()), _b = _a.next();
|
|
705
754
|
_d.label = 4;
|
|
706
755
|
case 4:
|
|
707
756
|
if (!!_b.done) return [3 /*break*/, 7];
|
|
@@ -727,13 +776,15 @@ var KnexSchemaBuilder = /** @class */ (function () {
|
|
|
727
776
|
case 10: return [3 /*break*/, 12];
|
|
728
777
|
case 11:
|
|
729
778
|
err_3 = _d.sent();
|
|
730
|
-
console.
|
|
779
|
+
console.error(err_3);
|
|
731
780
|
return [3 /*break*/, 12];
|
|
732
781
|
case 12: return [2 /*return*/];
|
|
733
782
|
}
|
|
734
783
|
});
|
|
735
784
|
});
|
|
736
785
|
};
|
|
786
|
+
//@internal
|
|
787
|
+
KnexSchemaBuilder.logToConsole = true;
|
|
737
788
|
return KnexSchemaBuilder;
|
|
738
789
|
}());
|
|
739
790
|
exports.KnexSchemaBuilder = KnexSchemaBuilder;
|
|
@@ -788,24 +839,20 @@ function buildColumn(x, dbName, b) {
|
|
|
788
839
|
}
|
|
789
840
|
exports.buildColumn = buildColumn;
|
|
790
841
|
function logSql(who) {
|
|
791
|
-
|
|
842
|
+
if (KnexSchemaBuilder.logToConsole)
|
|
843
|
+
console.info(who.toSQL());
|
|
792
844
|
return who;
|
|
793
845
|
}
|
|
794
|
-
function createKnexDataProvider(config
|
|
795
|
-
if (autoCreateTables === void 0) { autoCreateTables = true; }
|
|
846
|
+
function createKnexDataProvider(config) {
|
|
796
847
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
797
848
|
var k, result;
|
|
798
849
|
return tslib_1.__generator(this, function (_a) {
|
|
799
850
|
switch (_a.label) {
|
|
800
|
-
case 0:
|
|
801
|
-
k = knex_1.default(config);
|
|
802
|
-
result = new KnexDataProvider(k);
|
|
803
|
-
if (!autoCreateTables) return [3 /*break*/, 2];
|
|
804
|
-
return [4 /*yield*/, new KnexSchemaBuilder(k).verifyStructureOfAllEntities(new context_1.Remult(result))];
|
|
851
|
+
case 0: return [4 /*yield*/, Promise.resolve().then(function () { return tslib_1.__importStar(require('knex')); })];
|
|
805
852
|
case 1:
|
|
806
|
-
_a.sent();
|
|
807
|
-
|
|
808
|
-
|
|
853
|
+
k = (_a.sent()).default(config);
|
|
854
|
+
result = new KnexDataProvider(k);
|
|
855
|
+
return [2 /*return*/, result];
|
|
809
856
|
}
|
|
810
857
|
});
|
|
811
858
|
});
|
package/remult-mongo.d.ts
CHANGED
|
@@ -1,9 +1,16 @@
|
|
|
1
|
-
import { MongoClient, Db } from 'mongodb';
|
|
2
|
-
import { DataProvider, EntityDataProvider, EntityMetadata } from '.';
|
|
1
|
+
import type { MongoClient, Db } from 'mongodb';
|
|
2
|
+
import { DataProvider, EntityDataProvider, EntityFilter, EntityMetadata, Remult } from '.';
|
|
3
|
+
import { RepositoryOverloads } from './src/remult3';
|
|
3
4
|
export declare class MongoDataProvider implements DataProvider {
|
|
4
5
|
private db;
|
|
5
6
|
private client;
|
|
6
7
|
constructor(db: Db, client: MongoClient);
|
|
8
|
+
static getDb(remult?: Remult): Db;
|
|
7
9
|
getEntityDataProvider(entity: EntityMetadata<any>): EntityDataProvider;
|
|
8
10
|
transaction(action: (dataProvider: DataProvider) => Promise<void>): Promise<void>;
|
|
11
|
+
static filterToRaw<entityType>(entity: RepositoryOverloads<entityType>, condition: EntityFilter<entityType>): Promise<{
|
|
12
|
+
$and: any[];
|
|
13
|
+
} | {
|
|
14
|
+
$and?: undefined;
|
|
15
|
+
}>;
|
|
9
16
|
}
|
package/remult-mongo.js
CHANGED
|
@@ -4,11 +4,19 @@ exports.MongoDataProvider = void 0;
|
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var _1 = require(".");
|
|
6
6
|
var filter_consumer_bridge_to_sql_request_1 = require("./src/filter/filter-consumer-bridge-to-sql-request");
|
|
7
|
+
var remult3_1 = require("./src/remult3");
|
|
8
|
+
var remult_proxy_1 = require("./src/remult-proxy");
|
|
7
9
|
var MongoDataProvider = /** @class */ (function () {
|
|
8
10
|
function MongoDataProvider(db, client) {
|
|
9
11
|
this.db = db;
|
|
10
12
|
this.client = client;
|
|
11
13
|
}
|
|
14
|
+
MongoDataProvider.getDb = function (remult) {
|
|
15
|
+
var r = (remult || remult_proxy_1.remult).dataProvider;
|
|
16
|
+
if (!r.db)
|
|
17
|
+
throw "the data provider is not a MongoDataProvider";
|
|
18
|
+
return r.db;
|
|
19
|
+
};
|
|
12
20
|
MongoDataProvider.prototype.getEntityDataProvider = function (entity) {
|
|
13
21
|
return new MongoEntityDataProvider(this.db, entity);
|
|
14
22
|
};
|
|
@@ -42,6 +50,30 @@ var MongoDataProvider = /** @class */ (function () {
|
|
|
42
50
|
});
|
|
43
51
|
});
|
|
44
52
|
};
|
|
53
|
+
MongoDataProvider.filterToRaw = function (entity, condition) {
|
|
54
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
55
|
+
var repo, b, _a, r;
|
|
56
|
+
return tslib_1.__generator(this, function (_b) {
|
|
57
|
+
switch (_b.label) {
|
|
58
|
+
case 0:
|
|
59
|
+
repo = remult3_1.getRepository(entity);
|
|
60
|
+
_a = FilterConsumerBridgeToMongo.bind;
|
|
61
|
+
return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.dbNamesOf(repo.metadata)];
|
|
62
|
+
case 1:
|
|
63
|
+
b = new (_a.apply(FilterConsumerBridgeToMongo, [void 0, _b.sent()]))();
|
|
64
|
+
b._addWhere = false;
|
|
65
|
+
return [4 /*yield*/, (repo.translateWhereToFilter(condition))];
|
|
66
|
+
case 2: return [4 /*yield*/, (_b.sent()).__applyToConsumer(b)];
|
|
67
|
+
case 3:
|
|
68
|
+
_b.sent();
|
|
69
|
+
return [4 /*yield*/, b.resolveWhere()];
|
|
70
|
+
case 4:
|
|
71
|
+
r = _b.sent();
|
|
72
|
+
return [2 /*return*/, r];
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
};
|
|
45
77
|
return MongoDataProvider;
|
|
46
78
|
}());
|
|
47
79
|
exports.MongoDataProvider = MongoDataProvider;
|
|
@@ -60,7 +92,7 @@ var MongoEntityDataProvider = /** @class */ (function () {
|
|
|
60
92
|
try {
|
|
61
93
|
for (var _b = tslib_1.__values(this.entity.fields), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
62
94
|
var col = _c.value;
|
|
63
|
-
var val = row[nameProvider
|
|
95
|
+
var val = row[nameProvider.$dbNameOf(col)];
|
|
64
96
|
if (isNull(val))
|
|
65
97
|
val = null;
|
|
66
98
|
result[col.key] = col.valueConverter.fromDb(val);
|
|
@@ -84,7 +116,7 @@ var MongoEntityDataProvider = /** @class */ (function () {
|
|
|
84
116
|
var val = col.valueConverter.toDb(row[col.key]);
|
|
85
117
|
if (val === null)
|
|
86
118
|
val = NULL;
|
|
87
|
-
result[nameProvider
|
|
119
|
+
result[nameProvider.$dbNameOf(col)] = val;
|
|
88
120
|
}
|
|
89
121
|
}
|
|
90
122
|
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
@@ -143,7 +175,7 @@ var MongoEntityDataProvider = /** @class */ (function () {
|
|
|
143
175
|
try {
|
|
144
176
|
for (_b = tslib_1.__values(options.orderBy.Segments), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
145
177
|
s = _c.value;
|
|
146
|
-
op.sort[e
|
|
178
|
+
op.sort[e.$dbNameOf(s.field)] = s.isDescending ? -1 : 1;
|
|
147
179
|
}
|
|
148
180
|
}
|
|
149
181
|
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
@@ -267,10 +299,10 @@ var MongoEntityDataProvider = /** @class */ (function () {
|
|
|
267
299
|
var e, collection;
|
|
268
300
|
return tslib_1.__generator(this, function (_a) {
|
|
269
301
|
switch (_a.label) {
|
|
270
|
-
case 0: return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.
|
|
302
|
+
case 0: return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.dbNamesOf(this.entity)];
|
|
271
303
|
case 1:
|
|
272
304
|
e = _a.sent();
|
|
273
|
-
collection = this.db.collection(e
|
|
305
|
+
collection = this.db.collection(e.$entityName);
|
|
274
306
|
return [2 /*return*/, { e: e, collection: collection }];
|
|
275
307
|
}
|
|
276
308
|
});
|
|
@@ -399,7 +431,7 @@ var FilterConsumerBridgeToMongo = /** @class */ (function () {
|
|
|
399
431
|
this.result.push(function () {
|
|
400
432
|
var _a;
|
|
401
433
|
return (_a = {},
|
|
402
|
-
_a[_this.nameProvider
|
|
434
|
+
_a[_this.nameProvider.$dbNameOf(col)] = {
|
|
403
435
|
$in: val.map(function (x) { return col.valueConverter.toDb(x); })
|
|
404
436
|
},
|
|
405
437
|
_a);
|
|
@@ -435,7 +467,7 @@ var FilterConsumerBridgeToMongo = /** @class */ (function () {
|
|
|
435
467
|
this.result.push(function () {
|
|
436
468
|
var _a, _b;
|
|
437
469
|
return (_a = {},
|
|
438
|
-
_a[_this.nameProvider
|
|
470
|
+
_a[_this.nameProvider.$dbNameOf(col)] = (_b = {}, _b[operator] = isNull(val) ? val : col.valueConverter.toDb(val), _b),
|
|
439
471
|
_a);
|
|
440
472
|
});
|
|
441
473
|
};
|
package/remult-next.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import type { GetServerSideProps, NextApiRequest, PreviewData, NextApiHandler } from "next";
|
|
3
|
+
import type { ParsedUrlQuery } from "querystring";
|
|
4
|
+
import { RemultServer, RemultServerOptions } from "./server";
|
|
5
|
+
export declare function remultNext(options?: RemultServerOptions<NextApiRequest>): RemultServer & NextApiHandler & {
|
|
6
|
+
getServerSideProps<P extends {
|
|
7
|
+
[key: string]: any;
|
|
8
|
+
} = {
|
|
9
|
+
[key: string]: any;
|
|
10
|
+
}, Q extends ParsedUrlQuery = ParsedUrlQuery, D extends PreviewData = PreviewData>(getServerPropsFunction: GetServerSideProps<P, Q, D>): GetServerSideProps<P, Q, D>;
|
|
11
|
+
};
|