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.
Files changed (163) hide show
  1. package/SseSubscriptionServer.d.ts +23 -0
  2. package/SseSubscriptionServer.js +143 -0
  3. package/ably.d.ts +13 -0
  4. package/ably.js +59 -0
  5. package/esm/SseSubscriptionServer.d.ts +23 -0
  6. package/esm/SseSubscriptionServer.js +102 -0
  7. package/esm/ably.d.ts +13 -0
  8. package/esm/ably.js +28 -0
  9. package/esm/index.d.ts +7 -4
  10. package/esm/index.js +4 -2
  11. package/esm/live-query/data-provider-live-query-storage.d.ts +23 -0
  12. package/esm/live-query/data-provider-live-query-storage.js +78 -0
  13. package/esm/myLog.d.ts +1 -0
  14. package/esm/myLog.js +5 -0
  15. package/esm/postgres/postgres-data-provider.d.ts +4 -2
  16. package/esm/postgres/postgres-data-provider.js +18 -6
  17. package/esm/postgres/schema-builder.d.ts +2 -1
  18. package/esm/postgres/schema-builder.js +49 -29
  19. package/esm/remult-knex/index.d.ts +10 -32
  20. package/esm/remult-knex/index.js +75 -51
  21. package/esm/remult-mongo.d.ts +9 -2
  22. package/esm/remult-mongo.js +24 -8
  23. package/esm/remult-next.d.ts +11 -0
  24. package/esm/remult-next.js +27 -0
  25. package/esm/server/core.d.ts +2 -0
  26. package/esm/server/core.js +2 -0
  27. package/esm/server/expressBridge.d.ts +19 -7
  28. package/esm/server/expressBridge.js +135 -31
  29. package/esm/server/index.d.ts +2 -1
  30. package/esm/server/index.js +2 -1
  31. package/esm/server/initDataProvider.d.ts +2 -0
  32. package/esm/server/initDataProvider.js +14 -0
  33. package/esm/src/buildRestDataProvider.d.ts +31 -0
  34. package/esm/src/buildRestDataProvider.js +110 -0
  35. package/esm/src/column-interfaces.d.ts +44 -8
  36. package/esm/src/column.d.ts +3 -3
  37. package/esm/src/context.d.ts +39 -36
  38. package/esm/src/context.js +87 -117
  39. package/esm/src/data-api.d.ts +9 -3
  40. package/esm/src/data-api.js +130 -63
  41. package/esm/src/data-interfaces.d.ts +5 -1
  42. package/esm/src/data-providers/array-entity-data-provider.d.ts +1 -1
  43. package/esm/src/data-providers/array-entity-data-provider.js +2 -17
  44. package/esm/src/data-providers/rest-data-provider.d.ts +4 -3
  45. package/esm/src/data-providers/rest-data-provider.js +64 -23
  46. package/esm/src/data-providers/sql-database.d.ts +7 -3
  47. package/esm/src/data-providers/sql-database.js +60 -17
  48. package/esm/src/data-providers/web-sql-data-provider.d.ts +3 -0
  49. package/esm/src/data-providers/web-sql-data-provider.js +23 -9
  50. package/esm/src/entity.d.ts +2 -2
  51. package/esm/src/filter/filter-consumer-bridge-to-sql-request.d.ts +16 -16
  52. package/esm/src/filter/filter-consumer-bridge-to-sql-request.js +29 -21
  53. package/esm/src/filter/filter-interfaces.d.ts +5 -5
  54. package/esm/src/filter/filter-interfaces.js +31 -26
  55. package/esm/src/live-query/LiveQueryClient.d.ts +1 -0
  56. package/esm/src/live-query/LiveQueryClient.js +184 -0
  57. package/esm/src/live-query/SseSubscriptionClient.d.ts +5 -0
  58. package/esm/src/live-query/SseSubscriptionClient.js +86 -0
  59. package/esm/src/live-query/SubscriptionChannel.d.ts +41 -0
  60. package/esm/src/live-query/SubscriptionChannel.js +121 -0
  61. package/esm/src/live-query/SubscriptionServer.d.ts +38 -0
  62. package/esm/src/live-query/SubscriptionServer.js +108 -0
  63. package/esm/src/remult-proxy.d.ts +1 -1
  64. package/esm/src/remult-proxy.js +52 -7
  65. package/esm/src/remult3/RepositoryImplementation.d.ts +14 -5
  66. package/esm/src/remult3/RepositoryImplementation.js +124 -44
  67. package/esm/src/remult3/getId.d.ts +2 -0
  68. package/esm/src/remult3/getId.js +7 -0
  69. package/esm/src/remult3/remult3.d.ts +67 -10
  70. package/esm/src/remult3/remult3.js +1 -0
  71. package/esm/src/server-action.d.ts +5 -1
  72. package/esm/src/server-action.js +11 -12
  73. package/esm/src/shared-tests/db-tests-setup.d.ts +12 -5
  74. package/esm/src/shared-tests/db-tests-setup.js +14 -6
  75. package/esm/src/shared-tests/db-tests.db-tests.js +71 -10
  76. package/esm/src/sort.d.ts +1 -0
  77. package/esm/src/sort.js +18 -0
  78. package/esm/src/sql-command.d.ts +5 -2
  79. package/esm/src/tests/entityForCustomFilter.d.ts +6 -6
  80. package/esm/src/tests/entityForCustomFilter.js +20 -21
  81. package/esm/src/tests/frontend-database-tests-setup.spec.js +3 -4
  82. package/esm/src/tests/testHelper.spec.d.ts +3 -1
  83. package/esm/src/tests/testHelper.spec.js +63 -60
  84. package/esm/src/valueConverters.js +15 -7
  85. package/index.d.ts +7 -4
  86. package/index.js +7 -3
  87. package/live-query/data-provider-live-query-storage.d.ts +23 -0
  88. package/live-query/data-provider-live-query-storage.js +236 -0
  89. package/myLog.d.ts +1 -0
  90. package/myLog.js +20 -0
  91. package/package.json +18 -1
  92. package/postgres/postgres-data-provider.d.ts +4 -2
  93. package/postgres/postgres-data-provider.js +54 -39
  94. package/postgres/schema-builder.d.ts +2 -1
  95. package/postgres/schema-builder.js +118 -70
  96. package/remult-express.js +1 -1
  97. package/remult-knex/index.d.ts +10 -32
  98. package/remult-knex/index.js +134 -87
  99. package/remult-mongo.d.ts +9 -2
  100. package/remult-mongo.js +39 -7
  101. package/remult-next.d.ts +11 -0
  102. package/remult-next.js +73 -0
  103. package/server/JsonEntityFileStorage.js +2 -2
  104. package/server/core.d.ts +2 -0
  105. package/server/core.js +5 -1
  106. package/server/expressBridge.d.ts +19 -7
  107. package/server/expressBridge.js +283 -69
  108. package/server/index.d.ts +2 -1
  109. package/server/index.js +3 -1
  110. package/server/initDataProvider.d.ts +2 -0
  111. package/server/initDataProvider.js +26 -0
  112. package/src/buildRestDataProvider.d.ts +31 -0
  113. package/src/buildRestDataProvider.js +162 -0
  114. package/src/column-interfaces.d.ts +44 -8
  115. package/src/column.d.ts +3 -3
  116. package/src/context.d.ts +39 -36
  117. package/src/context.js +171 -166
  118. package/src/data-api.d.ts +9 -3
  119. package/src/data-api.js +233 -88
  120. package/src/data-interfaces.d.ts +5 -1
  121. package/src/data-providers/array-entity-data-provider.d.ts +1 -1
  122. package/src/data-providers/array-entity-data-provider.js +2 -17
  123. package/src/data-providers/rest-data-provider.d.ts +4 -3
  124. package/src/data-providers/rest-data-provider.js +105 -39
  125. package/src/data-providers/sql-database.d.ts +7 -3
  126. package/src/data-providers/sql-database.js +89 -16
  127. package/src/data-providers/web-sql-data-provider.d.ts +3 -0
  128. package/src/data-providers/web-sql-data-provider.js +56 -11
  129. package/src/entity.d.ts +2 -2
  130. package/src/filter/filter-consumer-bridge-to-sql-request.d.ts +16 -16
  131. package/src/filter/filter-consumer-bridge-to-sql-request.js +59 -50
  132. package/src/filter/filter-interfaces.d.ts +5 -5
  133. package/src/filter/filter-interfaces.js +31 -26
  134. package/src/live-query/LiveQueryClient.d.ts +1 -0
  135. package/src/live-query/LiveQueryClient.js +283 -0
  136. package/src/live-query/SseSubscriptionClient.d.ts +5 -0
  137. package/src/live-query/SseSubscriptionClient.js +150 -0
  138. package/src/live-query/SubscriptionChannel.d.ts +41 -0
  139. package/src/live-query/SubscriptionChannel.js +209 -0
  140. package/src/live-query/SubscriptionServer.d.ts +38 -0
  141. package/src/live-query/SubscriptionServer.js +258 -0
  142. package/src/remult-proxy.d.ts +1 -1
  143. package/src/remult-proxy.js +153 -8
  144. package/src/remult3/RepositoryImplementation.d.ts +14 -5
  145. package/src/remult3/RepositoryImplementation.js +200 -85
  146. package/src/remult3/getId.d.ts +2 -0
  147. package/src/remult3/getId.js +11 -0
  148. package/src/remult3/remult3.d.ts +67 -10
  149. package/src/remult3/remult3.js +1 -0
  150. package/src/server-action.d.ts +5 -1
  151. package/src/server-action.js +11 -11
  152. package/src/shared-tests/db-tests-setup.d.ts +12 -5
  153. package/src/shared-tests/db-tests-setup.js +17 -8
  154. package/src/shared-tests/db-tests.db-tests.js +140 -8
  155. package/src/sort.d.ts +1 -0
  156. package/src/sort.js +18 -0
  157. package/src/sql-command.d.ts +5 -2
  158. package/src/tests/entityForCustomFilter.d.ts +6 -6
  159. package/src/tests/entityForCustomFilter.js +30 -31
  160. package/src/tests/frontend-database-tests-setup.spec.js +5 -6
  161. package/src/tests/testHelper.spec.d.ts +3 -1
  162. package/src/tests/testHelper.spec.js +104 -100
  163. package/src/valueConverters.js +15 -7
@@ -1,8 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createKnexDataProvider = exports.buildColumn = exports.KnexSchemaBuilder = exports.FilterConsumerBridgeToKnexRequest = exports.KnexDataProvider = void 0;
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.customFilter = function (build) {
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.entityName)
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.nameOf(x));
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.entityName).select(cols);
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.nameOf(s.field),
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.getDbNameProvider(this.entity)];
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 (!e.isDbReadonly(x)) return [3 /*break*/, 4];
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.nameOf(x)];
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.entityName).update(updateObject).where(function (b) { return where.forEach(function (w) { return w(b); }); })];
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.entityName).delete().where(function (b) { return where.forEach(function (w) { return w(b); }); })];
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 (!e.isDbReadonly(x)) return [3 /*break*/, 4];
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.nameOf(x)];
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.entityName).insert(insertObject);
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.nameOf(col)); });
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.nameOf(col)); });
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.nameOf(col), val.map(function (x) { return col.valueConverter.toDb(x); }));
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.nameOf(col) + ") like lower ('%" + val.replace(/'/g, '\'\'') + "%')"); });
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.nameOf(col), operator, col.valueConverter.toDb(val)); });
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 allEntities_1, allEntities_1_1, entity, metadata, err_2, _a, _b, _c, e_6_1;
532
- var e_6, _d;
533
- return tslib_1.__generator(this, function (_e) {
534
- switch (_e.label) {
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
- console.log("start verify structure");
537
- _e.label = 1;
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
- _e.trys.push([1, 12, 13, 14]);
540
- allEntities_1 = tslib_1.__values(context_1.allEntities), allEntities_1_1 = allEntities_1.next();
541
- _e.label = 2;
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
- if (!!allEntities_1_1.done) return [3 /*break*/, 11];
544
- entity = allEntities_1_1.value;
545
- metadata = remult.repo(entity).metadata;
546
- _e.label = 3;
600
+ e = _b.sent();
601
+ _b.label = 3;
547
602
  case 3:
548
- _e.trys.push([3, 8, , 10]);
549
- if (!!metadata.options.sqlExpression) return [3 /*break*/, 7];
550
- return [4 /*yield*/, metadata.getDbName()];
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
- if (!((_e.sent()).toLowerCase().indexOf('from ') < 0)) return [3 /*break*/, 7];
553
- return [4 /*yield*/, this.createIfNotExist(metadata)];
608
+ _b.sent();
609
+ return [4 /*yield*/, this.verifyAllColumns(entity)];
554
610
  case 5:
555
- _e.sent();
556
- return [4 /*yield*/, this.verifyAllColumns(metadata)];
557
- case 6:
558
- _e.sent();
559
- _e.label = 7;
560
- case 7: return [3 /*break*/, 10];
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
- err_2 = _e.sent();
563
- _b = (_a = console).log;
564
- _c = "failed verify structure of ";
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
- allEntities_1_1 = allEntities_1.next();
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*/, 14];
577
- case 13:
625
+ return [3 /*break*/, 12];
626
+ case 11:
578
627
  try {
579
- if (allEntities_1_1 && !allEntities_1_1.done && (_d = allEntities_1.return)) _d.call(allEntities_1);
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 14: return [2 /*return*/];
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.getDbNameProvider(entity)];
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.entityName)];
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.nameOf(f),
606
- readonly: e.isDbReadonly(f)
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.entityName, function (b) {
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.getDbNameProvider(entity)];
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 (e.isDbReadonly(c(entity)))
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.nameOf(col);
661
- return [4 /*yield*/, this.knex.schema.hasColumn(e.entityName, colName)];
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.entityName, function (b) {
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.getDbNameProvider(entity)];
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 (!!e.isDbReadonly(col)) return [3 /*break*/, 2];
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.log(err_3);
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
- //console.log(who.toSQL().sql);
842
+ if (KnexSchemaBuilder.logToConsole)
843
+ console.info(who.toSQL());
792
844
  return who;
793
845
  }
794
- function createKnexDataProvider(config, autoCreateTables) {
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
- _a.label = 2;
808
- case 2: return [2 /*return*/, result];
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.nameOf(col)];
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.nameOf(col)] = val;
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.nameOf(s.field)] = s.isDescending ? -1 : 1;
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.getDbNameProvider(this.entity)];
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.entityName);
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.nameOf(col)] = {
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.nameOf(col)] = (_b = {}, _b[operator] = isNull(val) ? val : col.valueConverter.toDb(val), _b),
470
+ _a[_this.nameProvider.$dbNameOf(col)] = (_b = {}, _b[operator] = isNull(val) ? val : col.valueConverter.toDb(val), _b),
439
471
  _a);
440
472
  });
441
473
  };
@@ -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
+ };