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
@@ -4,6 +4,7 @@ exports.PostgresSchemaBuilder = exports.verifyStructureOfAllEntities = exports.p
4
4
  var tslib_1 = require("tslib");
5
5
  var context_1 = require("../src/context");
6
6
  var filter_consumer_bridge_to_sql_request_1 = require("../src/filter/filter-consumer-bridge-to-sql-request");
7
+ var remult_proxy_1 = require("../src/remult-proxy");
7
8
  var remult3_1 = require("../src/remult3");
8
9
  var valueConverters_1 = require("../src/valueConverters");
9
10
  function postgresColumnSyntax(x, dbName) {
@@ -57,58 +58,69 @@ var PostgresSchemaBuilder = /** @class */ (function () {
57
58
  }
58
59
  PostgresSchemaBuilder.prototype.verifyStructureOfAllEntities = function (remult) {
59
60
  return tslib_1.__awaiter(this, void 0, void 0, function () {
60
- var allEntities_1, allEntities_1_1, entityClass, entity, e, err_1, e_1_1;
61
- var e_1, _a;
62
- return tslib_1.__generator(this, function (_b) {
63
- switch (_b.label) {
61
+ var completed, _a, _b, entityClass, entity, e, err_1, e_1_1;
62
+ var e_1, _c;
63
+ return tslib_1.__generator(this, function (_d) {
64
+ switch (_d.label) {
64
65
  case 0:
65
- console.log("start verify structure"); //keep me
66
- _b.label = 1;
66
+ if (!remult) {
67
+ remult = remult_proxy_1.RemultProxy.defaultRemult;
68
+ }
69
+ if (PostgresSchemaBuilder.logToConsole)
70
+ console.time("Postgres Auto create tables and columns");
71
+ completed = new Set();
72
+ _d.label = 1;
67
73
  case 1:
68
- _b.trys.push([1, 12, 13, 14]);
69
- allEntities_1 = tslib_1.__values(context_1.allEntities), allEntities_1_1 = allEntities_1.next();
70
- _b.label = 2;
74
+ _d.trys.push([1, 12, 13, 14]);
75
+ _a = tslib_1.__values(tslib_1.__spread(context_1.allEntities).reverse()), _b = _a.next();
76
+ _d.label = 2;
71
77
  case 2:
72
- if (!!allEntities_1_1.done) return [3 /*break*/, 11];
73
- entityClass = allEntities_1_1.value;
78
+ if (!!_b.done) return [3 /*break*/, 11];
79
+ entityClass = _b.value;
74
80
  entity = remult.repo(entityClass).metadata;
75
- return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.getDbNameProvider(entity)];
81
+ return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.dbNamesOf(entity)];
76
82
  case 3:
77
- e = _b.sent();
78
- _b.label = 4;
83
+ e = _d.sent();
84
+ if (completed.has(e.$entityName))
85
+ return [3 /*break*/, 10];
86
+ completed.add(e.$entityName);
87
+ _d.label = 4;
79
88
  case 4:
80
- _b.trys.push([4, 9, , 10]);
89
+ _d.trys.push([4, 9, , 10]);
81
90
  if (!!entity.options.sqlExpression) return [3 /*break*/, 8];
82
- return [4 /*yield*/, e.entityName];
91
+ return [4 /*yield*/, e.$entityName];
83
92
  case 5:
84
- if (!((_b.sent()).toLowerCase().indexOf('from ') < 0)) return [3 /*break*/, 8];
93
+ if (!((_d.sent()).toLowerCase().indexOf('from ') < 0)) return [3 /*break*/, 8];
85
94
  return [4 /*yield*/, this.createIfNotExist(entity)];
86
95
  case 6:
87
- _b.sent();
96
+ _d.sent();
88
97
  return [4 /*yield*/, this.verifyAllColumns(entity)];
89
98
  case 7:
90
- _b.sent();
91
- _b.label = 8;
99
+ _d.sent();
100
+ _d.label = 8;
92
101
  case 8: return [3 /*break*/, 10];
93
102
  case 9:
94
- err_1 = _b.sent();
95
- /*keep me */ console.log("failed verify structure of " + e.entityName + " ", err_1);
103
+ err_1 = _d.sent();
104
+ console.error("failed verify structure of " + e.$entityName + " ", err_1);
96
105
  return [3 /*break*/, 10];
97
106
  case 10:
98
- allEntities_1_1 = allEntities_1.next();
107
+ _b = _a.next();
99
108
  return [3 /*break*/, 2];
100
109
  case 11: return [3 /*break*/, 14];
101
110
  case 12:
102
- e_1_1 = _b.sent();
111
+ e_1_1 = _d.sent();
103
112
  e_1 = { error: e_1_1 };
104
113
  return [3 /*break*/, 14];
105
114
  case 13:
106
115
  try {
107
- if (allEntities_1_1 && !allEntities_1_1.done && (_a = allEntities_1.return)) _a.call(allEntities_1);
116
+ if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
108
117
  }
109
118
  finally { if (e_1) throw e_1.error; }
110
119
  return [7 /*endfinally*/];
111
- case 14: return [2 /*return*/];
120
+ case 14:
121
+ if (PostgresSchemaBuilder.logToConsole)
122
+ console.timeEnd("Postgres Auto create tables and columns");
123
+ return [2 /*return*/];
112
124
  }
113
125
  });
114
126
  });
@@ -121,10 +133,10 @@ var PostgresSchemaBuilder = /** @class */ (function () {
121
133
  switch (_a.label) {
122
134
  case 0:
123
135
  c = this.pool.createCommand();
124
- return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.getDbNameProvider(entity)];
136
+ return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.dbNamesOf(entity)];
125
137
  case 1:
126
138
  e = _a.sent();
127
- return [4 /*yield*/, c.execute("select 1 from information_Schema.tables where table_name=" + c.addParameterAndReturnSqlToken((e.entityName).toLowerCase()) + this.additionalWhere).then(function (r) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
139
+ return [4 /*yield*/, c.execute("select 1 from information_Schema.tables where table_name=" + c.addParameterAndReturnSqlToken((e.$entityName).toLowerCase()) + this.additionalWhere).then(function (r) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
128
140
  var result, _a, _b, x, sql;
129
141
  var e_2, _c;
130
142
  return tslib_1.__generator(this, function (_d) {
@@ -135,17 +147,17 @@ var PostgresSchemaBuilder = /** @class */ (function () {
135
147
  try {
136
148
  for (_a = tslib_1.__values(entity.fields), _b = _a.next(); !_b.done; _b = _a.next()) {
137
149
  x = _b.value;
138
- if (!e.isDbReadonly(x) || remult3_1.isAutoIncrement(x)) {
150
+ if (!filter_consumer_bridge_to_sql_request_1.isDbReadonly(x, e) || remult3_1.isAutoIncrement(x)) {
139
151
  if (result.length != 0)
140
152
  result += ',';
141
153
  result += '\r\n ';
142
154
  if (remult3_1.isAutoIncrement(x))
143
- result += e.nameOf(x) + ' serial';
155
+ result += e.$dbNameOf(x) + ' serial';
144
156
  else {
145
- result += postgresColumnSyntax(x, e.nameOf(x));
146
- if (x == entity.idMetadata.field)
147
- result += ' primary key';
157
+ result += postgresColumnSyntax(x, e.$dbNameOf(x));
148
158
  }
159
+ if (x == entity.idMetadata.field)
160
+ result += ' primary key';
149
161
  }
150
162
  }
151
163
  }
@@ -156,11 +168,11 @@ var PostgresSchemaBuilder = /** @class */ (function () {
156
168
  }
157
169
  finally { if (e_2) throw e_2.error; }
158
170
  }
159
- sql = 'create table ' + e.entityName + ' (' + result + '\r\n)';
160
- //console.log(sql);
171
+ sql = 'create table ' + e.$entityName + ' (' + result + '\r\n)';
172
+ if (PostgresSchemaBuilder.logToConsole)
173
+ console.info(sql);
161
174
  return [4 /*yield*/, this.pool.execute(sql)];
162
175
  case 1:
163
- //console.log(sql);
164
176
  _d.sent();
165
177
  _d.label = 2;
166
178
  case 2: return [2 /*return*/];
@@ -179,24 +191,24 @@ var PostgresSchemaBuilder = /** @class */ (function () {
179
191
  var e, cmd, colName, sql, err_2;
180
192
  return tslib_1.__generator(this, function (_a) {
181
193
  switch (_a.label) {
182
- case 0: return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.getDbNameProvider(entity)];
194
+ case 0: return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.dbNamesOf(entity)];
183
195
  case 1:
184
196
  e = _a.sent();
185
- if (e.isDbReadonly(c(entity)))
197
+ if (filter_consumer_bridge_to_sql_request_1.isDbReadonly(c(entity), e))
186
198
  return [2 /*return*/];
187
199
  _a.label = 2;
188
200
  case 2:
189
201
  _a.trys.push([2, 6, , 7]);
190
202
  cmd = this.pool.createCommand();
191
- colName = e.nameOf(c(entity));
192
- return [4 /*yield*/, cmd.execute("select 1 \n FROM information_schema.columns \n WHERE table_name=" + cmd.addParameterAndReturnSqlToken((e.entityName).toLocaleLowerCase()) + " and column_name=" + cmd.addParameterAndReturnSqlToken((colName).toLocaleLowerCase()) + this.additionalWhere)];
203
+ colName = e.$dbNameOf(c(entity));
204
+ return [4 /*yield*/, cmd.execute("select 1 \n FROM information_schema.columns \n WHERE table_name=" + cmd.addParameterAndReturnSqlToken((e.$entityName).toLocaleLowerCase()) + " and column_name=" + cmd.addParameterAndReturnSqlToken((colName).toLocaleLowerCase()) + this.additionalWhere)];
193
205
  case 3:
194
206
  if (!((_a.sent()).rows.length == 0)) return [3 /*break*/, 5];
195
- sql = "alter table " + e.entityName + " add column " + postgresColumnSyntax(c(entity), colName);
196
- //console.log(sql);
207
+ sql = "alter table " + e.$entityName + " add column " + postgresColumnSyntax(c(entity), colName);
208
+ if (PostgresSchemaBuilder.logToConsole)
209
+ console.info(sql);
197
210
  return [4 /*yield*/, this.pool.execute(sql)];
198
211
  case 4:
199
- //console.log(sql);
200
212
  _a.sent();
201
213
  _a.label = 5;
202
214
  case 5: return [3 /*break*/, 7];
@@ -218,10 +230,10 @@ var PostgresSchemaBuilder = /** @class */ (function () {
218
230
  case 0:
219
231
  _d.trys.push([0, 11, , 12]);
220
232
  cmd = this.pool.createCommand();
221
- return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.getDbNameProvider(entity)];
233
+ return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.dbNamesOf(entity)];
222
234
  case 1:
223
235
  e = _d.sent();
224
- return [4 /*yield*/, cmd.execute("select column_name \n FROM information_schema.columns \n WHERE table_name=" + cmd.addParameterAndReturnSqlToken((e.entityName).toLocaleLowerCase()) + " " + this.additionalWhere)];
236
+ return [4 /*yield*/, cmd.execute("select column_name \n FROM information_schema.columns \n WHERE table_name=" + cmd.addParameterAndReturnSqlToken((e.$entityName).toLocaleLowerCase()) + " " + this.additionalWhere)];
225
237
  case 2:
226
238
  cols = (_d.sent()).rows.map(function (x) { return x.column_name; });
227
239
  _d.label = 3;
@@ -232,13 +244,13 @@ var PostgresSchemaBuilder = /** @class */ (function () {
232
244
  case 4:
233
245
  if (!!_b.done) return [3 /*break*/, 7];
234
246
  col = _b.value;
235
- if (!!e.isDbReadonly(col)) return [3 /*break*/, 6];
236
- if (!!cols.includes(e.nameOf(col).toLocaleLowerCase())) return [3 /*break*/, 6];
237
- sql = "alter table " + e.entityName + " add column " + postgresColumnSyntax(col, e.nameOf(col));
238
- //console.log(sql);
247
+ if (!!filter_consumer_bridge_to_sql_request_1.isDbReadonly(col, e)) return [3 /*break*/, 6];
248
+ if (!!cols.includes(e.$dbNameOf(col).toLocaleLowerCase())) return [3 /*break*/, 6];
249
+ sql = "alter table " + e.$entityName + " add column " + postgresColumnSyntax(col, e.$dbNameOf(col));
250
+ if (PostgresSchemaBuilder.logToConsole)
251
+ console.info(sql);
239
252
  return [4 /*yield*/, this.pool.execute(sql)];
240
253
  case 5:
241
- //console.log(sql);
242
254
  _d.sent();
243
255
  _d.label = 6;
244
256
  case 6:
@@ -265,6 +277,8 @@ var PostgresSchemaBuilder = /** @class */ (function () {
265
277
  });
266
278
  });
267
279
  };
280
+ //@internal
281
+ PostgresSchemaBuilder.logToConsole = true;
268
282
  return PostgresSchemaBuilder;
269
283
  }());
270
284
  exports.PostgresSchemaBuilder = PostgresSchemaBuilder;
@@ -1,32 +1,14 @@
1
1
  import * as express from 'express';
2
2
  import { RemultServer, RemultServerOptions } from './server/expressBridge';
3
3
  import { Remult } from './src/context';
4
- import { ServerEventChannelSubscribeDTO } from './src/live-query/LiveQuerySubscriber';
5
- import { ServerEventDispatcher } from './src/live-query/LiveQueryPublisher';
4
+ import { SubscriptionServer } from './src/live-query/SubscriptionServer';
6
5
  export declare function remultExpress(options?: RemultServerOptions<express.Request> & {
7
6
  bodyParser?: boolean;
8
7
  bodySizeLimit?: string;
9
- serverEventDispatcher?: (router: express.Router, server: RemultServer) => ServerEventDispatcher;
10
8
  }): express.RequestHandler & RemultServer;
11
- export declare class ServerEventsController implements ServerEventDispatcher {
9
+ export declare class SseSubscriptionServer implements SubscriptionServer {
12
10
  private canUserConnectToChannel?;
13
- subscribeToChannel({ channel, clientId }: ServerEventChannelSubscribeDTO, res: import('express').Response, remult: Remult, remove?: boolean): void;
14
- connections: clientConnection[];
15
11
  constructor(canUserConnectToChannel?: (channel: string, remult: Remult) => boolean);
16
- sendChannelMessage<T>(channel: string, message: any): void;
17
- debugMessageFileSaver: (id: any, channel: any, message: any) => void;
18
- openHttpServerStream(req: import('express').Request, res: import('express').Response): clientConnection;
19
- debug(): void;
20
- debugFileSaver: (x: any) => void;
12
+ publishMessage<T>(channel: string, message: any): void;
13
+ registerRoutes(router: express.Router, apiPath: string, server: RemultServer): void;
21
14
  }
22
- declare class clientConnection {
23
- response: import('express').Response;
24
- channels: Record<string, boolean>;
25
- close(): void;
26
- closed: boolean;
27
- write(eventData: string, eventType?: string): void;
28
- connectionId: any;
29
- constructor(response: import('express').Response);
30
- sendLiveMessage(): void;
31
- }
32
- export {};
package/remult-express.js CHANGED
@@ -1,11 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ServerEventsController = exports.remultExpress = void 0;
3
+ exports.SseSubscriptionServer = exports.remultExpress = void 0;
4
4
  var tslib_1 = require("tslib");
5
- var express = require("express");
6
- var expressBridge_1 = require("./server/expressBridge");
7
- var LiveQuerySubscriber_1 = require("./src/live-query/LiveQuerySubscriber");
8
- var LiveQueryPublisher_1 = require("./src/live-query/LiveQueryPublisher");
5
+ var express = tslib_1.__importStar(require("express"));
6
+ var index_1 = require("./server/index");
7
+ var SubscriptionChannel_1 = require("./src/live-query/SubscriptionChannel");
9
8
  var uuid_1 = require("uuid");
10
9
  var remult_proxy_1 = require("./src/remult-proxy");
11
10
  var remult3_1 = require("./src/remult3");
@@ -22,27 +21,16 @@ function remultExpress(options) {
22
21
  app.use(express.json({ limit: options.bodySizeLimit }));
23
22
  app.use(express.urlencoded({ extended: true, limit: options.bodySizeLimit }));
24
23
  }
25
- var server = expressBridge_1.createRemultServer(options);
24
+ if (!options.subscriptionServer) {
25
+ options.subscriptionServer = new SseSubscriptionServer();
26
+ }
27
+ var server = index_1.createRemultServer(options);
26
28
  server.registerRouter(app);
27
- if (!options.serverEventDispatcher) {
28
- options.serverEventDispatcher = function (router, server) {
29
- return buildHttpServerEventDispatcher(router, options.rootPath, server);
30
- };
29
+ var canRegisterRoute = options.subscriptionServer;
30
+ if (canRegisterRoute.registerRoutes) {
31
+ canRegisterRoute.registerRoutes(app, options.rootPath, server);
31
32
  }
32
- app.post(options.rootPath + LiveQuerySubscriber_1.liveQueryKeepAliveRoute, function (r, res, n) { return server.withRemult(r, res, n); }, function (req, res) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
33
- var _a, _b;
34
- return tslib_1.__generator(this, function (_c) {
35
- switch (_c.label) {
36
- case 0:
37
- _b = (_a = res).send;
38
- return [4 /*yield*/, remult_proxy_1.remult.liveQueryPublisher.storage.keepAliveAndReturnUnknownIds(req.body)];
39
- case 1:
40
- _b.apply(_a, [_c.sent()]);
41
- return [2 /*return*/];
42
- }
43
- });
44
- }); });
45
- server.liveQueryManager = new LiveQueryPublisher_1.LiveQueryPublisher(options.serverEventDispatcher(app, server), new LiveQueryPublisher_1.LiveQueryStorageInMemoryImplementation(), function (req, entityKey, what) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
33
+ server.runWithRequest = function (req, entityKey, what) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
46
34
  var _loop_1, _a, _b, e, state_1, e_1_1;
47
35
  var e_1, _c;
48
36
  var _this = this;
@@ -107,7 +95,7 @@ function remultExpress(options) {
107
95
  case 8: throw new Error("Couldn't find entity " + entityKey);
108
96
  }
109
97
  });
110
- }); });
98
+ }); };
111
99
  return Object.assign(app, {
112
100
  getRemult: function (req) { return server.getRemult(req); },
113
101
  openApiDoc: function (options) { return server.openApiDoc(options); },
@@ -122,17 +110,21 @@ function remultExpress(options) {
122
110
  });
123
111
  }
124
112
  exports.remultExpress = remultExpress;
125
- var ServerEventsController = /** @class */ (function () {
126
- function ServerEventsController(canUserConnectToChannel) {
113
+ var SseSubscriptionServer = /** @class */ (function () {
114
+ function SseSubscriptionServer(canUserConnectToChannel) {
127
115
  this.canUserConnectToChannel = canUserConnectToChannel;
116
+ //@internal
128
117
  this.connections = [];
118
+ //@internal
129
119
  this.debugMessageFileSaver = function (id, channel, message) { };
120
+ //@internal
130
121
  this.debugFileSaver = function () { };
131
122
  if (!this.canUserConnectToChannel) {
132
123
  this.canUserConnectToChannel = function () { return true; };
133
124
  }
134
125
  }
135
- ServerEventsController.prototype.subscribeToChannel = function (_a, res, remult, remove) {
126
+ //@internal
127
+ SseSubscriptionServer.prototype.subscribeToChannel = function (_a, res, remult, remove) {
136
128
  var e_2, _b;
137
129
  var channel = _a.channel, clientId = _a.clientId;
138
130
  if (remove === void 0) { remove = false; }
@@ -166,7 +158,7 @@ var ServerEventsController = /** @class */ (function () {
166
158
  }
167
159
  res.sendStatus(404);
168
160
  };
169
- ServerEventsController.prototype.sendChannelMessage = function (channel, message) {
161
+ SseSubscriptionServer.prototype.publishMessage = function (channel, message) {
170
162
  var e_3, _a;
171
163
  var data = JSON.stringify({ channel: channel, data: message });
172
164
  try {
@@ -186,7 +178,8 @@ var ServerEventsController = /** @class */ (function () {
186
178
  finally { if (e_3) throw e_3.error; }
187
179
  }
188
180
  };
189
- ServerEventsController.prototype.openHttpServerStream = function (req, res) {
181
+ //@internal
182
+ SseSubscriptionServer.prototype.openHttpServerStream = function (req, res) {
190
183
  var _this = this;
191
184
  res.writeHead(200, {
192
185
  'Content-Type': 'text/event-stream',
@@ -204,15 +197,28 @@ var ServerEventsController = /** @class */ (function () {
204
197
  });
205
198
  return cc;
206
199
  };
207
- ServerEventsController.prototype.debug = function () {
200
+ //@internal
201
+ SseSubscriptionServer.prototype.debug = function () {
208
202
  this.debugFileSaver(this.connections.map(function (x) { return ({
209
203
  id: x.connectionId,
210
204
  channels: x.channels
211
205
  }); }));
212
206
  };
213
- return ServerEventsController;
207
+ SseSubscriptionServer.prototype.registerRoutes = function (router, apiPath, server) {
208
+ var streamPath = apiPath + '/' + SubscriptionChannel_1.streamUrl;
209
+ router.get(streamPath, function (r, res, next) { return server.withRemult(r, res, next); }, function (req, res) {
210
+ remult_proxy_1.remult.subscriptionServer.openHttpServerStream(req, res);
211
+ });
212
+ router.post(streamPath + '/subscribe', function (r, res, next) { return server.withRemult(r, res, next); }, function (req, res) {
213
+ remult_proxy_1.remult.subscriptionServer.subscribeToChannel(req.body, res, remult_proxy_1.remult);
214
+ });
215
+ router.post(streamPath + '/unsubscribe', function (r, res, next) { return server.withRemult(r, res, next); }, function (req, res) {
216
+ remult_proxy_1.remult.subscriptionServer.subscribeToChannel(req.body, res, remult_proxy_1.remult, true);
217
+ });
218
+ };
219
+ return SseSubscriptionServer;
214
220
  }());
215
- exports.ServerEventsController = ServerEventsController;
221
+ exports.SseSubscriptionServer = SseSubscriptionServer;
216
222
  var clientConnection = /** @class */ (function () {
217
223
  function clientConnection(response) {
218
224
  this.response = response;
@@ -246,17 +252,3 @@ var clientConnection = /** @class */ (function () {
246
252
  };
247
253
  return clientConnection;
248
254
  }());
249
- function buildHttpServerEventDispatcher(router, apiPath, server) {
250
- var streamPath = apiPath + '/' + LiveQuerySubscriber_1.streamUrl;
251
- var httpServerEvents = new ServerEventsController();
252
- router.get(streamPath, function (r, res, next) { return server.withRemult(r, res, next); }, function (req, res) {
253
- remult_proxy_1.remult.liveQueryPublisher.dispatcher.openHttpServerStream(req, res);
254
- });
255
- router.post(streamPath + '/subscribe', function (r, res, next) { return server.withRemult(r, res, next); }, function (req, res) {
256
- remult_proxy_1.remult.liveQueryPublisher.dispatcher.subscribeToChannel(req.body, res, remult_proxy_1.remult);
257
- });
258
- router.post(streamPath + '/unsubscribe', function (r, res, next) { return server.withRemult(r, res, next); }, function (req, res) {
259
- remult_proxy_1.remult.liveQueryPublisher.dispatcher.subscribeToChannel(req.body, res, remult_proxy_1.remult, true);
260
- });
261
- return httpServerEvents;
262
- }
package/remult-fastify.js CHANGED
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.remultFastify = void 0;
4
4
  var tslib_1 = require("tslib");
5
- var expressBridge_1 = require("./server/expressBridge");
5
+ var index_1 = require("./server/index");
6
6
  function remultFastify(options) {
7
7
  var _this = this;
8
8
  function fastifyHandler(handler) {
@@ -23,7 +23,7 @@ function remultFastify(options) {
23
23
  };
24
24
  return response;
25
25
  }
26
- var api = expressBridge_1.createRemultServer(options);
26
+ var api = index_1.createRemultServer(options);
27
27
  var pluginFunction = function (instance, op) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
28
28
  var fastifyRouter;
29
29
  return tslib_1.__generator(this, function (_a) {
package/remult-fresh.js CHANGED
@@ -5,7 +5,7 @@ var tslib_1 = require("tslib");
5
5
  var expressBridge_1 = require("./server/expressBridge");
6
6
  function remultFresh(options, response) {
7
7
  var _this = this;
8
- var server = expressBridge_1.createRemultServer(options);
8
+ var server = expressBridge_1.createRemultServerCore(options);
9
9
  return {
10
10
  getRemult: function (r) { return server.getRemult(r); },
11
11
  openApiDoc: function (x) { return server.openApiDoc(x); },
@@ -1,46 +1,22 @@
1
- import { Knex } from 'knex';
2
- import { Filter, FilterConsumer } from "../src/filter/filter-interfaces";
3
- import { dbNameProvider } from "../src/filter/filter-consumer-bridge-to-sql-request";
1
+ import type { Knex } from 'knex';
4
2
  import { Remult } from "../src/context";
5
- import { EntityFilter, EntityMetadata } from "../src/remult3";
3
+ import { EntityFilter, EntityMetadata, RepositoryOverloads } from "../src/remult3";
6
4
  import { DataProvider, EntityDataProvider } from '../src/data-interfaces';
7
5
  import { FieldMetadata } from '../src/column-interfaces';
8
6
  export declare class KnexDataProvider implements DataProvider {
9
7
  knex: Knex;
10
8
  constructor(knex: Knex);
9
+ static getDb(remult?: Remult): Knex<any, any[]>;
11
10
  getEntityDataProvider(entity: EntityMetadata<any>): EntityDataProvider;
12
11
  transaction(action: (dataProvider: DataProvider) => Promise<void>): Promise<void>;
13
- static customFilter(build: CustomKnexFilterBuilderFunction): EntityFilter<any>;
14
- supportsCustomFilter?: boolean;
12
+ static rawFilter(build: CustomKnexFilterBuilderFunction): EntityFilter<any>;
13
+ static filterToRaw<entityType>(entity: RepositoryOverloads<entityType>, condition: EntityFilter<entityType>): Promise<(knex: any) => void>;
14
+ supportsrawFilter?: boolean;
15
15
  }
16
16
  export declare type CustomKnexFilterBuilderFunction = () => Promise<(builder: Knex.QueryBuilder) => void>;
17
- export declare class FilterConsumerBridgeToKnexRequest implements FilterConsumer {
18
- private nameProvider;
19
- _addWhere: boolean;
20
- promises: Promise<void>[];
21
- result: ((builder: Knex.QueryBuilder) => void)[];
22
- resolveWhere(): Promise<((builder: Knex.QueryBuilder<any, any>) => void)[]>;
23
- constructor(nameProvider: dbNameProvider);
24
- custom(key: string, customItem: any): void;
25
- or(orElements: Filter[]): void;
26
- isNull(col: FieldMetadata): void;
27
- isNotNull(col: FieldMetadata): void;
28
- isIn(col: FieldMetadata, val: any[]): void;
29
- isEqualTo(col: FieldMetadata, val: any): void;
30
- isDifferentFrom(col: FieldMetadata, val: any): void;
31
- isGreaterOrEqualTo(col: FieldMetadata, val: any): void;
32
- isGreaterThan(col: FieldMetadata, val: any): void;
33
- isLessOrEqualTo(col: FieldMetadata, val: any): void;
34
- isLessThan(col: FieldMetadata, val: any): void;
35
- containsCaseInsensitive(col: FieldMetadata, val: any): void;
36
- private add;
37
- databaseCustom(databaseCustom: {
38
- buildKnex: CustomKnexFilterBuilderFunction;
39
- }): void;
40
- }
41
17
  export declare class KnexSchemaBuilder {
42
18
  private knex;
43
- verifyStructureOfAllEntities(remult: Remult): Promise<void>;
19
+ verifyStructureOfAllEntities(remult?: Remult): Promise<void>;
44
20
  createIfNotExist(entity: EntityMetadata): Promise<void>;
45
21
  addColumnIfNotExist<T extends EntityMetadata>(entity: T, c: ((e: T) => FieldMetadata)): Promise<void>;
46
22
  verifyAllColumns<T extends EntityMetadata>(entity: T): Promise<void>;