remult 0.18.1-exp.2 → 0.18.1-exp.21

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 (154) hide show
  1. package/README.md +28 -5
  2. package/esm/index.d.ts +4 -3
  3. package/esm/index.js +4 -2
  4. package/esm/live-query/ably.d.ts +6 -6
  5. package/esm/live-query/ably.js +5 -5
  6. package/esm/postgres/postgres-data-provider.d.ts +3 -1
  7. package/esm/postgres/postgres-data-provider.js +11 -1
  8. package/esm/postgres/schema-builder.d.ts +1 -1
  9. package/esm/postgres/schema-builder.js +43 -27
  10. package/esm/remult-express.d.ts +4 -22
  11. package/esm/remult-express.js +30 -28
  12. package/esm/remult-fastify.js +1 -1
  13. package/esm/remult-fresh.js +2 -2
  14. package/esm/remult-knex/index.d.ts +7 -31
  15. package/esm/remult-knex/index.js +71 -42
  16. package/esm/remult-mongo.d.ts +9 -2
  17. package/esm/remult-mongo.js +24 -8
  18. package/esm/remult-next.d.ts +11 -0
  19. package/esm/remult-next.js +27 -0
  20. package/esm/server/expressBridge.d.ts +20 -52
  21. package/esm/server/expressBridge.js +55 -29
  22. package/esm/server/index.d.ts +3 -1
  23. package/esm/server/index.js +6 -1
  24. package/esm/src/column-interfaces.d.ts +44 -8
  25. package/esm/src/context.d.ts +31 -19
  26. package/esm/src/context.js +35 -42
  27. package/esm/src/data-api.js +17 -4
  28. package/esm/src/data-interfaces.d.ts +1 -1
  29. package/esm/src/data-providers/array-entity-data-provider.d.ts +1 -1
  30. package/esm/src/data-providers/array-entity-data-provider.js +1 -1
  31. package/esm/src/data-providers/rest-data-provider.d.ts +4 -15
  32. package/esm/src/data-providers/rest-data-provider.js +38 -23
  33. package/esm/src/data-providers/sql-database.d.ts +6 -3
  34. package/esm/src/data-providers/sql-database.js +57 -16
  35. package/esm/src/data-providers/web-sql-data-provider.d.ts +2 -0
  36. package/esm/src/data-providers/web-sql-data-provider.js +17 -8
  37. package/esm/src/entity.d.ts +2 -2
  38. package/esm/src/filter/filter-consumer-bridge-to-sql-request.d.ts +16 -16
  39. package/esm/src/filter/filter-consumer-bridge-to-sql-request.js +29 -21
  40. package/esm/src/filter/filter-interfaces.d.ts +5 -5
  41. package/esm/src/filter/filter-interfaces.js +31 -26
  42. package/esm/src/live-query/LiveQueryClient.d.ts +1 -19
  43. package/esm/src/live-query/LiveQueryClient.js +81 -50
  44. package/esm/src/live-query/SseSubscriptionClient.d.ts +4 -0
  45. package/esm/src/live-query/{EventSourceLiveQueryProvider.js → SseSubscriptionClient.js} +7 -6
  46. package/esm/src/live-query/SubscriptionChannel.d.ts +41 -0
  47. package/esm/src/live-query/{LiveQuerySubscriber.js → SubscriptionChannel.js} +40 -22
  48. package/esm/src/live-query/SubscriptionServer.d.ts +38 -0
  49. package/esm/src/live-query/{LiveQueryPublisher.js → SubscriptionServer.js} +60 -73
  50. package/esm/src/remult-proxy.js +44 -1
  51. package/esm/src/remult3/RepositoryImplementation.d.ts +8 -2
  52. package/esm/src/remult3/RepositoryImplementation.js +94 -30
  53. package/esm/src/remult3/remult3.d.ts +59 -6
  54. package/esm/src/remult3/remult3.js +1 -0
  55. package/esm/src/server-action.d.ts +1 -1
  56. package/esm/src/shared-tests/db-tests-setup.d.ts +1 -1
  57. package/esm/src/shared-tests/db-tests-setup.js +4 -3
  58. package/esm/src/shared-tests/db-tests.db-tests.js +55 -9
  59. package/esm/src/sql-command.d.ts +4 -2
  60. package/esm/src/tests/entityForCustomFilter.d.ts +6 -6
  61. package/esm/src/tests/entityForCustomFilter.js +20 -21
  62. package/esm/src/tests/frontend-database-tests-setup.spec.js +1 -2
  63. package/esm/src/tests/testHelper.spec.d.ts +2 -2
  64. package/esm/src/tests/testHelper.spec.js +1 -2
  65. package/esm/src/valueConverters.js +17 -7
  66. package/index.d.ts +4 -3
  67. package/index.js +7 -3
  68. package/live-query/ably.d.ts +6 -6
  69. package/live-query/ably.js +12 -12
  70. package/package.json +18 -9
  71. package/postgres/postgres-data-provider.d.ts +3 -1
  72. package/postgres/postgres-data-provider.js +13 -3
  73. package/postgres/schema-builder.d.ts +1 -1
  74. package/postgres/schema-builder.js +64 -50
  75. package/remult-express.d.ts +4 -22
  76. package/remult-express.js +39 -47
  77. package/remult-fastify.js +2 -2
  78. package/remult-fresh.js +1 -1
  79. package/remult-knex/index.d.ts +7 -31
  80. package/remult-knex/index.js +100 -53
  81. package/remult-mongo.d.ts +9 -2
  82. package/remult-mongo.js +39 -7
  83. package/remult-next.d.ts +11 -0
  84. package/remult-next.js +73 -0
  85. package/server/JsonEntityFileStorage.js +2 -2
  86. package/server/expressBridge.d.ts +20 -52
  87. package/server/expressBridge.js +68 -41
  88. package/server/index.d.ts +3 -1
  89. package/server/index.js +7 -2
  90. package/src/column-interfaces.d.ts +44 -8
  91. package/src/context.d.ts +31 -19
  92. package/src/context.js +39 -50
  93. package/src/data-api.js +18 -5
  94. package/src/data-interfaces.d.ts +1 -1
  95. package/src/data-providers/array-entity-data-provider.d.ts +1 -1
  96. package/src/data-providers/array-entity-data-provider.js +1 -1
  97. package/src/data-providers/rest-data-provider.d.ts +4 -15
  98. package/src/data-providers/rest-data-provider.js +48 -24
  99. package/src/data-providers/sql-database.d.ts +6 -3
  100. package/src/data-providers/sql-database.js +75 -15
  101. package/src/data-providers/web-sql-data-provider.d.ts +2 -0
  102. package/src/data-providers/web-sql-data-provider.js +16 -7
  103. package/src/entity.d.ts +2 -2
  104. package/src/filter/filter-consumer-bridge-to-sql-request.d.ts +16 -16
  105. package/src/filter/filter-consumer-bridge-to-sql-request.js +59 -50
  106. package/src/filter/filter-interfaces.d.ts +5 -5
  107. package/src/filter/filter-interfaces.js +31 -26
  108. package/src/live-query/LiveQueryClient.d.ts +1 -19
  109. package/src/live-query/LiveQueryClient.js +117 -64
  110. package/src/live-query/SseSubscriptionClient.d.ts +4 -0
  111. package/src/live-query/{EventSourceLiveQueryProvider.js → SseSubscriptionClient.js} +13 -12
  112. package/src/live-query/SubscriptionChannel.d.ts +41 -0
  113. package/src/live-query/{LiveQuerySubscriber.js → SubscriptionChannel.js} +51 -47
  114. package/src/live-query/SubscriptionServer.d.ts +38 -0
  115. package/src/live-query/SubscriptionServer.js +237 -0
  116. package/src/remult-proxy.js +137 -2
  117. package/src/remult3/RepositoryImplementation.d.ts +8 -2
  118. package/src/remult3/RepositoryImplementation.js +121 -34
  119. package/src/remult3/remult3.d.ts +59 -6
  120. package/src/remult3/remult3.js +1 -0
  121. package/src/server-action.d.ts +1 -1
  122. package/src/shared-tests/db-tests-setup.d.ts +1 -1
  123. package/src/shared-tests/db-tests-setup.js +5 -4
  124. package/src/shared-tests/db-tests.db-tests.js +101 -8
  125. package/src/sql-command.d.ts +4 -2
  126. package/src/tests/entityForCustomFilter.d.ts +6 -6
  127. package/src/tests/entityForCustomFilter.js +30 -31
  128. package/src/tests/frontend-database-tests-setup.spec.js +4 -5
  129. package/src/tests/testHelper.spec.d.ts +2 -2
  130. package/src/tests/testHelper.spec.js +4 -5
  131. package/src/valueConverters.js +17 -7
  132. package/esm/live-query/index.d.ts +0 -3
  133. package/esm/live-query/index.js +0 -3
  134. package/esm/src/backend-tests/backend-database-test-setup.backend-spec.d.ts +0 -5
  135. package/esm/src/backend-tests/backend-database-test-setup.backend-spec.js +0 -113
  136. package/esm/src/backend-tests/my-test.backend-spec.d.ts +0 -1
  137. package/esm/src/backend-tests/my-test.backend-spec.js +0 -59
  138. package/esm/src/backend-tests/test-http-server.backend-spec.d.ts +0 -6
  139. package/esm/src/backend-tests/test-http-server.backend-spec.js +0 -171
  140. package/esm/src/live-query/EventSourceLiveQueryProvider.d.ts +0 -4
  141. package/esm/src/live-query/LiveQueryPublisher.d.ts +0 -49
  142. package/esm/src/live-query/LiveQuerySubscriber.d.ts +0 -67
  143. package/live-query/index.d.ts +0 -3
  144. package/live-query/index.js +0 -10
  145. package/src/backend-tests/backend-database-test-setup.backend-spec.d.ts +0 -5
  146. package/src/backend-tests/backend-database-test-setup.backend-spec.js +0 -231
  147. package/src/backend-tests/my-test.backend-spec.d.ts +0 -1
  148. package/src/backend-tests/my-test.backend-spec.js +0 -160
  149. package/src/backend-tests/test-http-server.backend-spec.d.ts +0 -6
  150. package/src/backend-tests/test-http-server.backend-spec.js +0 -342
  151. package/src/live-query/EventSourceLiveQueryProvider.d.ts +0 -4
  152. package/src/live-query/LiveQueryPublisher.d.ts +0 -49
  153. package/src/live-query/LiveQueryPublisher.js +0 -248
  154. package/src/live-query/LiveQuerySubscriber.d.ts +0 -67
@@ -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,30 @@ 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
+ };
57
87
  return KnexDataProvider;
58
88
  }());
59
89
  exports.KnexDataProvider = KnexDataProvider;
@@ -75,7 +105,7 @@ var KnexEntityDataProvider = /** @class */ (function () {
75
105
  return [4 /*yield*/, br.resolveWhere()];
76
106
  case 2:
77
107
  r = _a.sent();
78
- return [4 /*yield*/, this.knex(e.entityName)
108
+ return [4 /*yield*/, this.knex(e.$entityName)
79
109
  .count().where(function (b) { return r.forEach(function (w) { return w(b); }); })];
80
110
  case 3:
81
111
  result = (_a.sent());
@@ -108,7 +138,7 @@ var KnexEntityDataProvider = /** @class */ (function () {
108
138
  if (x.isServerExpression) {
109
139
  }
110
140
  else {
111
- cols.push(e.nameOf(x));
141
+ cols.push(e.$dbNameOf(x));
112
142
  colKeys.push(x);
113
143
  }
114
144
  }
@@ -120,7 +150,7 @@ var KnexEntityDataProvider = /** @class */ (function () {
120
150
  }
121
151
  finally { if (e_1) throw e_1.error; }
122
152
  }
123
- query = this.knex(e.entityName).select(cols);
153
+ query = this.knex(e.$entityName).select(cols);
124
154
  if (!(options === null || options === void 0 ? void 0 : options.where)) return [3 /*break*/, 3];
125
155
  br = new FilterConsumerBridgeToKnexRequest(e);
126
156
  options.where.__applyToConsumer(br);
@@ -135,7 +165,7 @@ var KnexEntityDataProvider = /** @class */ (function () {
135
165
  }
136
166
  if (options.orderBy) {
137
167
  query = query.orderBy(options.orderBy.Segments.map(function (s) { return ({
138
- column: e.nameOf(s.field),
168
+ column: e.$dbNameOf(s.field),
139
169
  order: s.isDescending ? "desc" : "asc"
140
170
  }); }));
141
171
  }
@@ -169,7 +199,7 @@ var KnexEntityDataProvider = /** @class */ (function () {
169
199
  return tslib_1.__awaiter(this, void 0, void 0, function () {
170
200
  return tslib_1.__generator(this, function (_a) {
171
201
  switch (_a.label) {
172
- case 0: return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.getDbNameProvider(this.entity)];
202
+ case 0: return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.dbNamesOf(this.entity)];
173
203
  case 1: return [2 /*return*/, _a.sent()];
174
204
  }
175
205
  });
@@ -198,13 +228,13 @@ var KnexEntityDataProvider = /** @class */ (function () {
198
228
  case 3:
199
229
  if (!!_b.done) return [3 /*break*/, 7];
200
230
  x = _b.value;
201
- if (!e.isDbReadonly(x)) return [3 /*break*/, 4];
231
+ if (!filter_consumer_bridge_to_sql_request_1.isDbReadonly(x, e)) return [3 /*break*/, 4];
202
232
  return [3 /*break*/, 6];
203
233
  case 4:
204
234
  if (!(data[x.key] !== undefined)) return [3 /*break*/, 6];
205
235
  v = x.valueConverter.toDb(data[x.key]);
206
236
  if (!(v !== undefined)) return [3 /*break*/, 6];
207
- return [4 /*yield*/, e.nameOf(x)];
237
+ return [4 /*yield*/, e.$dbNameOf(x)];
208
238
  case 5:
209
239
  key = _d.sent();
210
240
  updateObject[key] = v;
@@ -226,7 +256,7 @@ var KnexEntityDataProvider = /** @class */ (function () {
226
256
  case 10: return [4 /*yield*/, f.resolveWhere()];
227
257
  case 11:
228
258
  where = _d.sent();
229
- return [4 /*yield*/, this.knex(e.entityName).update(updateObject).where(function (b) { return where.forEach(function (w) { return w(b); }); })];
259
+ return [4 /*yield*/, this.knex(e.$entityName).update(updateObject).where(function (b) { return where.forEach(function (w) { return w(b); }); })];
230
260
  case 12:
231
261
  _d.sent();
232
262
  return [2 /*return*/, this.find({ where: filter_interfaces_1.Filter.fromEntityFilter(this.entity, resultFilter) }).then(function (y) { return y[0]; })];
@@ -247,7 +277,7 @@ var KnexEntityDataProvider = /** @class */ (function () {
247
277
  return [4 /*yield*/, f.resolveWhere()];
248
278
  case 2:
249
279
  where = _a.sent();
250
- return [4 /*yield*/, this.knex(e.entityName).delete().where(function (b) { return where.forEach(function (w) { return w(b); }); })];
280
+ return [4 /*yield*/, this.knex(e.$entityName).delete().where(function (b) { return where.forEach(function (w) { return w(b); }); })];
251
281
  case 3:
252
282
  _a.sent();
253
283
  return [2 /*return*/];
@@ -257,7 +287,7 @@ var KnexEntityDataProvider = /** @class */ (function () {
257
287
  };
258
288
  KnexEntityDataProvider.prototype.insert = function (data) {
259
289
  return tslib_1.__awaiter(this, void 0, void 0, function () {
260
- var e, resultFilter, insertObject, _a, _b, x, v, key, e_3_1, insert, result, newId_1;
290
+ var e, resultFilter, insertObject, _a, _b, x, v, key, e_3_1, insert, newId_1, result, result;
261
291
  var e_3, _c;
262
292
  var _this = this;
263
293
  return tslib_1.__generator(this, function (_d) {
@@ -278,12 +308,12 @@ var KnexEntityDataProvider = /** @class */ (function () {
278
308
  case 3:
279
309
  if (!!_b.done) return [3 /*break*/, 7];
280
310
  x = _b.value;
281
- if (!e.isDbReadonly(x)) return [3 /*break*/, 4];
311
+ if (!filter_consumer_bridge_to_sql_request_1.isDbReadonly(x, e)) return [3 /*break*/, 4];
282
312
  return [3 /*break*/, 6];
283
313
  case 4:
284
314
  v = x.valueConverter.toDb(data[x.key]);
285
315
  if (!(v != undefined)) return [3 /*break*/, 6];
286
- return [4 /*yield*/, e.nameOf(x)];
316
+ return [4 /*yield*/, e.$dbNameOf(x)];
287
317
  case 5:
288
318
  key = _d.sent();
289
319
  insertObject[key] = v;
@@ -303,19 +333,27 @@ var KnexEntityDataProvider = /** @class */ (function () {
303
333
  finally { if (e_3) throw e_3.error; }
304
334
  return [7 /*endfinally*/];
305
335
  case 10:
306
- insert = this.knex(e.entityName).insert(insertObject);
307
- if (!remult3_1.isAutoIncrement(this.entity.idMetadata.field)) return [3 /*break*/, 12];
308
- return [4 /*yield*/, insert.returning(this.entity.idMetadata.field.key)];
336
+ insert = this.knex(e.$entityName).insert(insertObject);
337
+ if (!remult3_1.isAutoIncrement(this.entity.idMetadata.field)) return [3 /*break*/, 15];
338
+ if (!(this.knex.client.config.client === 'mysql2')) return [3 /*break*/, 12];
339
+ return [4 /*yield*/, insert];
309
340
  case 11:
310
341
  result = _d.sent();
311
- newId_1 = result[0].id;
312
- resultFilter = new filter_interfaces_1.Filter(function (x) { return x.isEqualTo(_this.entity.idMetadata.field, newId_1); });
342
+ newId_1 = result[0];
313
343
  return [3 /*break*/, 14];
314
- case 12: return [4 /*yield*/, insert];
344
+ case 12: return [4 /*yield*/, insert.returning(this.entity.idMetadata.field.key)];
315
345
  case 13:
316
- _d.sent();
346
+ result = _d.sent();
347
+ newId_1 = result[0].id;
317
348
  _d.label = 14;
318
- case 14: return [2 /*return*/, this.find({ where: resultFilter }).then(function (y) {
349
+ case 14:
350
+ resultFilter = new filter_interfaces_1.Filter(function (x) { return x.isEqualTo(_this.entity.idMetadata.field, newId_1); });
351
+ return [3 /*break*/, 17];
352
+ case 15: return [4 /*yield*/, insert];
353
+ case 16:
354
+ _d.sent();
355
+ _d.label = 17;
356
+ case 17: return [2 /*return*/, this.find({ where: resultFilter }).then(function (y) {
319
357
  return y[0];
320
358
  })];
321
359
  }
@@ -449,16 +487,16 @@ var FilterConsumerBridgeToKnexRequest = /** @class */ (function () {
449
487
  };
450
488
  FilterConsumerBridgeToKnexRequest.prototype.isNull = function (col) {
451
489
  var _this = this;
452
- this.result.push(function (b) { return b.whereNull(_this.nameProvider.nameOf(col)); });
490
+ this.result.push(function (b) { return b.whereNull(_this.nameProvider.$dbNameOf(col)); });
453
491
  };
454
492
  FilterConsumerBridgeToKnexRequest.prototype.isNotNull = function (col) {
455
493
  var _this = this;
456
- this.result.push(function (b) { return b.whereNotNull(_this.nameProvider.nameOf(col)); });
494
+ this.result.push(function (b) { return b.whereNotNull(_this.nameProvider.$dbNameOf(col)); });
457
495
  };
458
496
  FilterConsumerBridgeToKnexRequest.prototype.isIn = function (col, val) {
459
497
  var _this = this;
460
498
  this.result.push(function (knex) {
461
- return knex.whereIn(_this.nameProvider.nameOf(col), val.map(function (x) { return col.valueConverter.toDb(x); }));
499
+ return knex.whereIn(_this.nameProvider.$dbNameOf(col), val.map(function (x) { return col.valueConverter.toDb(x); }));
462
500
  });
463
501
  };
464
502
  FilterConsumerBridgeToKnexRequest.prototype.isEqualTo = function (col, val) {
@@ -481,7 +519,7 @@ var FilterConsumerBridgeToKnexRequest = /** @class */ (function () {
481
519
  };
482
520
  FilterConsumerBridgeToKnexRequest.prototype.containsCaseInsensitive = function (col, val) {
483
521
  var _this = this;
484
- this.result.push(function (b) { return b.whereRaw('lower (' + _this.nameProvider.nameOf(col) + ") like lower ('%" + val.replace(/'/g, '\'\'') + "%')"); });
522
+ this.result.push(function (b) { return b.whereRaw('lower (' + _this.nameProvider.$dbNameOf(col) + ") like lower ('%" + val.replace(/'/g, '\'\'') + "%')"); });
485
523
  this.promises.push((function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
486
524
  return tslib_1.__generator(this, function (_a) {
487
525
  return [2 /*return*/];
@@ -490,7 +528,7 @@ var FilterConsumerBridgeToKnexRequest = /** @class */ (function () {
490
528
  };
491
529
  FilterConsumerBridgeToKnexRequest.prototype.add = function (col, val, operator) {
492
530
  var _this = this;
493
- this.result.push(function (b) { return b.where(_this.nameProvider.nameOf(col), operator, col.valueConverter.toDb(val)); });
531
+ this.result.push(function (b) { return b.where(_this.nameProvider.$dbNameOf(col), operator, col.valueConverter.toDb(val)); });
494
532
  };
495
533
  FilterConsumerBridgeToKnexRequest.prototype.databaseCustom = function (databaseCustom) {
496
534
  var _this = this;
@@ -512,7 +550,6 @@ var FilterConsumerBridgeToKnexRequest = /** @class */ (function () {
512
550
  };
513
551
  return FilterConsumerBridgeToKnexRequest;
514
552
  }());
515
- exports.FilterConsumerBridgeToKnexRequest = FilterConsumerBridgeToKnexRequest;
516
553
  var KnexSchemaBuilder = /** @class */ (function () {
517
554
  function KnexSchemaBuilder(knex) {
518
555
  this.knex = knex;
@@ -525,7 +562,10 @@ var KnexSchemaBuilder = /** @class */ (function () {
525
562
  return tslib_1.__generator(this, function (_e) {
526
563
  switch (_e.label) {
527
564
  case 0:
528
- console.info("start verify structure");
565
+ if (!remult)
566
+ remult = remult_proxy_1.RemultProxy.defaultRemult;
567
+ if (KnexSchemaBuilder.logToConsole)
568
+ console.time("Knex Auto create tables and columns");
529
569
  _e.label = 1;
530
570
  case 1:
531
571
  _e.trys.push([1, 12, 13, 14]);
@@ -552,7 +592,7 @@ var KnexSchemaBuilder = /** @class */ (function () {
552
592
  case 7: return [3 /*break*/, 10];
553
593
  case 8:
554
594
  err_2 = _e.sent();
555
- _b = (_a = console).log;
595
+ _b = (_a = console).error;
556
596
  _c = "failed verify structure of ";
557
597
  return [4 /*yield*/, metadata.getDbName()];
558
598
  case 9:
@@ -572,7 +612,10 @@ var KnexSchemaBuilder = /** @class */ (function () {
572
612
  }
573
613
  finally { if (e_6) throw e_6.error; }
574
614
  return [7 /*endfinally*/];
575
- case 14: return [2 /*return*/];
615
+ case 14:
616
+ if (KnexSchemaBuilder.logToConsole)
617
+ console.timeEnd("Knex Auto create tables and columns");
618
+ return [2 /*return*/];
576
619
  }
577
620
  });
578
621
  });
@@ -583,10 +626,10 @@ var KnexSchemaBuilder = /** @class */ (function () {
583
626
  var e_7, _c;
584
627
  return tslib_1.__generator(this, function (_d) {
585
628
  switch (_d.label) {
586
- case 0: return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.getDbNameProvider(entity)];
629
+ case 0: return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.dbNamesOf(entity)];
587
630
  case 1:
588
631
  e = _d.sent();
589
- return [4 /*yield*/, this.knex.schema.hasTable(e.entityName)];
632
+ return [4 /*yield*/, this.knex.schema.hasTable(e.$entityName)];
590
633
  case 2:
591
634
  if (!!(_d.sent())) return [3 /*break*/, 4];
592
635
  cols_1 = new Map();
@@ -594,8 +637,8 @@ var KnexSchemaBuilder = /** @class */ (function () {
594
637
  for (_a = tslib_1.__values(entity.fields), _b = _a.next(); !_b.done; _b = _a.next()) {
595
638
  f = _b.value;
596
639
  cols_1.set(f, {
597
- name: e.nameOf(f),
598
- readonly: e.isDbReadonly(f)
640
+ name: e.$dbNameOf(f),
641
+ readonly: filter_consumer_bridge_to_sql_request_1.isDbReadonly(f, e)
599
642
  });
600
643
  }
601
644
  }
@@ -606,7 +649,7 @@ var KnexSchemaBuilder = /** @class */ (function () {
606
649
  }
607
650
  finally { if (e_7) throw e_7.error; }
608
651
  }
609
- return [4 /*yield*/, logSql(this.knex.schema.createTable(e.entityName, function (b) {
652
+ return [4 /*yield*/, logSql(this.knex.schema.createTable(e.$entityName, function (b) {
610
653
  var e_8, _a;
611
654
  try {
612
655
  for (var _b = tslib_1.__values(entity.fields), _c = _b.next(); !_c.done; _c = _b.next()) {
@@ -643,19 +686,19 @@ var KnexSchemaBuilder = /** @class */ (function () {
643
686
  var e, col, colName;
644
687
  return tslib_1.__generator(this, function (_a) {
645
688
  switch (_a.label) {
646
- case 0: return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.getDbNameProvider(entity)];
689
+ case 0: return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.dbNamesOf(entity)];
647
690
  case 1:
648
691
  e = _a.sent();
649
- if (e.isDbReadonly(c(entity)))
692
+ if (filter_consumer_bridge_to_sql_request_1.isDbReadonly(c(entity), e))
650
693
  return [2 /*return*/];
651
694
  col = c(entity);
652
- colName = e.nameOf(col);
653
- return [4 /*yield*/, this.knex.schema.hasColumn(e.entityName, colName)];
695
+ colName = e.$dbNameOf(col);
696
+ return [4 /*yield*/, this.knex.schema.hasColumn(e.$entityName, colName)];
654
697
  case 2:
655
698
  if (!!(_a.sent())) return [3 /*break*/, 4];
656
- return [4 /*yield*/, this.knex.schema.alterTable(e.entityName, function (b) {
699
+ return [4 /*yield*/, logSql(this.knex.schema.alterTable(e.$entityName, function (b) {
657
700
  buildColumn(col, colName, b);
658
- })];
701
+ }))];
659
702
  case 3:
660
703
  _a.sent();
661
704
  _a.label = 4;
@@ -670,7 +713,7 @@ var KnexSchemaBuilder = /** @class */ (function () {
670
713
  var e_9, _c;
671
714
  return tslib_1.__generator(this, function (_d) {
672
715
  switch (_d.label) {
673
- case 0: return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.getDbNameProvider(entity)];
716
+ case 0: return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.dbNamesOf(entity)];
674
717
  case 1:
675
718
  e = _d.sent();
676
719
  _d.label = 2;
@@ -680,7 +723,7 @@ var KnexSchemaBuilder = /** @class */ (function () {
680
723
  return tslib_1.__generator(this, function (_a) {
681
724
  switch (_a.label) {
682
725
  case 0:
683
- if (!!e.isDbReadonly(col)) return [3 /*break*/, 2];
726
+ if (!!filter_consumer_bridge_to_sql_request_1.isDbReadonly(col, e)) return [3 /*break*/, 2];
684
727
  return [4 /*yield*/, this_2.addColumnIfNotExist(entity, function () { return col; })];
685
728
  case 1:
686
729
  _a.sent();
@@ -693,7 +736,7 @@ var KnexSchemaBuilder = /** @class */ (function () {
693
736
  _d.label = 3;
694
737
  case 3:
695
738
  _d.trys.push([3, 8, 9, 10]);
696
- _a = tslib_1.__values(entity.fields), _b = _a.next();
739
+ _a = tslib_1.__values(entity.fields.toArray()), _b = _a.next();
697
740
  _d.label = 4;
698
741
  case 4:
699
742
  if (!!_b.done) return [3 /*break*/, 7];
@@ -726,6 +769,8 @@ var KnexSchemaBuilder = /** @class */ (function () {
726
769
  });
727
770
  });
728
771
  };
772
+ //@internal
773
+ KnexSchemaBuilder.logToConsole = true;
729
774
  return KnexSchemaBuilder;
730
775
  }());
731
776
  exports.KnexSchemaBuilder = KnexSchemaBuilder;
@@ -780,7 +825,8 @@ function buildColumn(x, dbName, b) {
780
825
  }
781
826
  exports.buildColumn = buildColumn;
782
827
  function logSql(who) {
783
- //console.log(who.toSQL().sql);
828
+ if (KnexSchemaBuilder.logToConsole)
829
+ console.info(who.toSQL());
784
830
  return who;
785
831
  }
786
832
  function createKnexDataProvider(config, autoCreateTables) {
@@ -789,15 +835,16 @@ function createKnexDataProvider(config, autoCreateTables) {
789
835
  var k, result;
790
836
  return tslib_1.__generator(this, function (_a) {
791
837
  switch (_a.label) {
792
- case 0:
793
- k = knex_1.default(config);
838
+ case 0: return [4 /*yield*/, Promise.resolve().then(function () { return tslib_1.__importStar(require('knex')); })];
839
+ case 1:
840
+ k = (_a.sent()).default(config);
794
841
  result = new KnexDataProvider(k);
795
- if (!autoCreateTables) return [3 /*break*/, 2];
842
+ if (!autoCreateTables) return [3 /*break*/, 3];
796
843
  return [4 /*yield*/, new KnexSchemaBuilder(k).verifyStructureOfAllEntities(new context_1.Remult(result))];
797
- case 1:
844
+ case 2:
798
845
  _a.sent();
799
- _a.label = 2;
800
- case 2: return [2 /*return*/, result];
846
+ _a.label = 3;
847
+ case 3: return [2 /*return*/, result];
801
848
  }
802
849
  });
803
850
  });
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
+ };
package/remult-next.js ADDED
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.remultNext = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var server_1 = require("./server");
6
+ function remultNext(options) {
7
+ var _this = this;
8
+ var result = server_1.createRemultServer(options);
9
+ return Object.assign(function (req, res) { return result.handle(req, res); }, result, {
10
+ getRemult: function () {
11
+ var args = [];
12
+ for (var _i = 0; _i < arguments.length; _i++) {
13
+ args[_i] = arguments[_i];
14
+ }
15
+ return result.getRemult.apply(result, tslib_1.__spread(args));
16
+ },
17
+ handle: function () {
18
+ var args = [];
19
+ for (var _i = 0; _i < arguments.length; _i++) {
20
+ args[_i] = arguments[_i];
21
+ }
22
+ return result.handle.apply(result, tslib_1.__spread(args));
23
+ },
24
+ openApiDoc: function () {
25
+ var args = [];
26
+ for (var _i = 0; _i < arguments.length; _i++) {
27
+ args[_i] = arguments[_i];
28
+ }
29
+ return result.openApiDoc.apply(result, tslib_1.__spread(args));
30
+ },
31
+ registerRouter: function () {
32
+ var args = [];
33
+ for (var _i = 0; _i < arguments.length; _i++) {
34
+ args[_i] = arguments[_i];
35
+ }
36
+ return result.registerRouter.apply(result, tslib_1.__spread(args));
37
+ },
38
+ withRemult: function () {
39
+ var args = [];
40
+ for (var _i = 0; _i < arguments.length; _i++) {
41
+ args[_i] = arguments[_i];
42
+ }
43
+ return result.withRemult.apply(result, tslib_1.__spread(args));
44
+ },
45
+ }, {
46
+ getServerSideProps: function (getServerPropsFunction) {
47
+ return function (context) {
48
+ return new Promise(function (res, err) {
49
+ result.withRemult(context, undefined, function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
50
+ var r, e_1;
51
+ return tslib_1.__generator(this, function (_a) {
52
+ switch (_a.label) {
53
+ case 0:
54
+ _a.trys.push([0, 2, , 3]);
55
+ return [4 /*yield*/, getServerPropsFunction(context)];
56
+ case 1:
57
+ r = _a.sent();
58
+ res(JSON.parse(JSON.stringify(r)));
59
+ return [3 /*break*/, 3];
60
+ case 2:
61
+ e_1 = _a.sent();
62
+ err(e_1);
63
+ return [3 /*break*/, 3];
64
+ case 3: return [2 /*return*/];
65
+ }
66
+ });
67
+ }); });
68
+ });
69
+ };
70
+ }
71
+ });
72
+ }
73
+ exports.remultNext = remultNext;
@@ -2,8 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.JsonFileDataProvider = exports.JsonEntityFileStorage = void 0;
4
4
  var tslib_1 = require("tslib");
5
- var path = require("path");
6
- var fs = require("fs");
5
+ var path = tslib_1.__importStar(require("path"));
6
+ var fs = tslib_1.__importStar(require("fs"));
7
7
  var index_1 = require("../index");
8
8
  var JsonEntityFileStorage = /** @class */ (function () {
9
9
  function JsonEntityFileStorage(folderPath) {