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