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.
- package/README.md +28 -5
- package/esm/index.d.ts +4 -3
- package/esm/index.js +4 -2
- package/esm/live-query/ably.d.ts +6 -6
- package/esm/live-query/ably.js +5 -5
- package/esm/postgres/postgres-data-provider.d.ts +3 -1
- package/esm/postgres/postgres-data-provider.js +11 -1
- package/esm/postgres/schema-builder.d.ts +1 -1
- package/esm/postgres/schema-builder.js +43 -27
- package/esm/remult-express.d.ts +4 -22
- package/esm/remult-express.js +30 -28
- package/esm/remult-fastify.js +1 -1
- package/esm/remult-fresh.js +2 -2
- package/esm/remult-knex/index.d.ts +7 -31
- package/esm/remult-knex/index.js +71 -42
- package/esm/remult-mongo.d.ts +9 -2
- package/esm/remult-mongo.js +24 -8
- package/esm/remult-next.d.ts +11 -0
- package/esm/remult-next.js +27 -0
- package/esm/server/expressBridge.d.ts +20 -52
- package/esm/server/expressBridge.js +55 -29
- package/esm/server/index.d.ts +3 -1
- package/esm/server/index.js +6 -1
- package/esm/src/column-interfaces.d.ts +44 -8
- package/esm/src/context.d.ts +31 -19
- package/esm/src/context.js +35 -42
- package/esm/src/data-api.js +17 -4
- package/esm/src/data-interfaces.d.ts +1 -1
- package/esm/src/data-providers/array-entity-data-provider.d.ts +1 -1
- package/esm/src/data-providers/array-entity-data-provider.js +1 -1
- package/esm/src/data-providers/rest-data-provider.d.ts +4 -15
- package/esm/src/data-providers/rest-data-provider.js +38 -23
- package/esm/src/data-providers/sql-database.d.ts +6 -3
- package/esm/src/data-providers/sql-database.js +57 -16
- package/esm/src/data-providers/web-sql-data-provider.d.ts +2 -0
- package/esm/src/data-providers/web-sql-data-provider.js +17 -8
- package/esm/src/entity.d.ts +2 -2
- package/esm/src/filter/filter-consumer-bridge-to-sql-request.d.ts +16 -16
- package/esm/src/filter/filter-consumer-bridge-to-sql-request.js +29 -21
- package/esm/src/filter/filter-interfaces.d.ts +5 -5
- package/esm/src/filter/filter-interfaces.js +31 -26
- package/esm/src/live-query/LiveQueryClient.d.ts +1 -19
- package/esm/src/live-query/LiveQueryClient.js +81 -50
- package/esm/src/live-query/SseSubscriptionClient.d.ts +4 -0
- package/esm/src/live-query/{EventSourceLiveQueryProvider.js → SseSubscriptionClient.js} +7 -6
- package/esm/src/live-query/SubscriptionChannel.d.ts +41 -0
- package/esm/src/live-query/{LiveQuerySubscriber.js → SubscriptionChannel.js} +40 -22
- package/esm/src/live-query/SubscriptionServer.d.ts +38 -0
- package/esm/src/live-query/{LiveQueryPublisher.js → SubscriptionServer.js} +60 -73
- package/esm/src/remult-proxy.js +44 -1
- package/esm/src/remult3/RepositoryImplementation.d.ts +8 -2
- package/esm/src/remult3/RepositoryImplementation.js +94 -30
- package/esm/src/remult3/remult3.d.ts +59 -6
- package/esm/src/remult3/remult3.js +1 -0
- package/esm/src/server-action.d.ts +1 -1
- package/esm/src/shared-tests/db-tests-setup.d.ts +1 -1
- package/esm/src/shared-tests/db-tests-setup.js +4 -3
- package/esm/src/shared-tests/db-tests.db-tests.js +55 -9
- package/esm/src/sql-command.d.ts +4 -2
- package/esm/src/tests/entityForCustomFilter.d.ts +6 -6
- package/esm/src/tests/entityForCustomFilter.js +20 -21
- package/esm/src/tests/frontend-database-tests-setup.spec.js +1 -2
- package/esm/src/tests/testHelper.spec.d.ts +2 -2
- package/esm/src/tests/testHelper.spec.js +1 -2
- package/esm/src/valueConverters.js +17 -7
- package/index.d.ts +4 -3
- package/index.js +7 -3
- package/live-query/ably.d.ts +6 -6
- package/live-query/ably.js +12 -12
- package/package.json +18 -9
- package/postgres/postgres-data-provider.d.ts +3 -1
- package/postgres/postgres-data-provider.js +13 -3
- package/postgres/schema-builder.d.ts +1 -1
- package/postgres/schema-builder.js +64 -50
- package/remult-express.d.ts +4 -22
- package/remult-express.js +39 -47
- package/remult-fastify.js +2 -2
- package/remult-fresh.js +1 -1
- package/remult-knex/index.d.ts +7 -31
- package/remult-knex/index.js +100 -53
- package/remult-mongo.d.ts +9 -2
- package/remult-mongo.js +39 -7
- package/remult-next.d.ts +11 -0
- package/remult-next.js +73 -0
- package/server/JsonEntityFileStorage.js +2 -2
- package/server/expressBridge.d.ts +20 -52
- package/server/expressBridge.js +68 -41
- package/server/index.d.ts +3 -1
- package/server/index.js +7 -2
- package/src/column-interfaces.d.ts +44 -8
- package/src/context.d.ts +31 -19
- package/src/context.js +39 -50
- package/src/data-api.js +18 -5
- package/src/data-interfaces.d.ts +1 -1
- package/src/data-providers/array-entity-data-provider.d.ts +1 -1
- package/src/data-providers/array-entity-data-provider.js +1 -1
- package/src/data-providers/rest-data-provider.d.ts +4 -15
- package/src/data-providers/rest-data-provider.js +48 -24
- package/src/data-providers/sql-database.d.ts +6 -3
- package/src/data-providers/sql-database.js +75 -15
- package/src/data-providers/web-sql-data-provider.d.ts +2 -0
- package/src/data-providers/web-sql-data-provider.js +16 -7
- package/src/entity.d.ts +2 -2
- package/src/filter/filter-consumer-bridge-to-sql-request.d.ts +16 -16
- package/src/filter/filter-consumer-bridge-to-sql-request.js +59 -50
- package/src/filter/filter-interfaces.d.ts +5 -5
- package/src/filter/filter-interfaces.js +31 -26
- package/src/live-query/LiveQueryClient.d.ts +1 -19
- package/src/live-query/LiveQueryClient.js +117 -64
- package/src/live-query/SseSubscriptionClient.d.ts +4 -0
- package/src/live-query/{EventSourceLiveQueryProvider.js → SseSubscriptionClient.js} +13 -12
- package/src/live-query/SubscriptionChannel.d.ts +41 -0
- package/src/live-query/{LiveQuerySubscriber.js → SubscriptionChannel.js} +51 -47
- package/src/live-query/SubscriptionServer.d.ts +38 -0
- package/src/live-query/SubscriptionServer.js +237 -0
- package/src/remult-proxy.js +137 -2
- package/src/remult3/RepositoryImplementation.d.ts +8 -2
- package/src/remult3/RepositoryImplementation.js +121 -34
- package/src/remult3/remult3.d.ts +59 -6
- package/src/remult3/remult3.js +1 -0
- package/src/server-action.d.ts +1 -1
- package/src/shared-tests/db-tests-setup.d.ts +1 -1
- package/src/shared-tests/db-tests-setup.js +5 -4
- package/src/shared-tests/db-tests.db-tests.js +101 -8
- package/src/sql-command.d.ts +4 -2
- package/src/tests/entityForCustomFilter.d.ts +6 -6
- package/src/tests/entityForCustomFilter.js +30 -31
- package/src/tests/frontend-database-tests-setup.spec.js +4 -5
- package/src/tests/testHelper.spec.d.ts +2 -2
- package/src/tests/testHelper.spec.js +4 -5
- package/src/valueConverters.js +17 -7
- package/esm/live-query/index.d.ts +0 -3
- package/esm/live-query/index.js +0 -3
- package/esm/src/backend-tests/backend-database-test-setup.backend-spec.d.ts +0 -5
- package/esm/src/backend-tests/backend-database-test-setup.backend-spec.js +0 -113
- package/esm/src/backend-tests/my-test.backend-spec.d.ts +0 -1
- package/esm/src/backend-tests/my-test.backend-spec.js +0 -59
- package/esm/src/backend-tests/test-http-server.backend-spec.d.ts +0 -6
- package/esm/src/backend-tests/test-http-server.backend-spec.js +0 -171
- package/esm/src/live-query/EventSourceLiveQueryProvider.d.ts +0 -4
- package/esm/src/live-query/LiveQueryPublisher.d.ts +0 -49
- package/esm/src/live-query/LiveQuerySubscriber.d.ts +0 -67
- package/live-query/index.d.ts +0 -3
- package/live-query/index.js +0 -10
- package/src/backend-tests/backend-database-test-setup.backend-spec.d.ts +0 -5
- package/src/backend-tests/backend-database-test-setup.backend-spec.js +0 -231
- package/src/backend-tests/my-test.backend-spec.d.ts +0 -1
- package/src/backend-tests/my-test.backend-spec.js +0 -160
- package/src/backend-tests/test-http-server.backend-spec.d.ts +0 -6
- package/src/backend-tests/test-http-server.backend-spec.js +0 -342
- package/src/live-query/EventSourceLiveQueryProvider.d.ts +0 -4
- package/src/live-query/LiveQueryPublisher.d.ts +0 -49
- package/src/live-query/LiveQueryPublisher.js +0 -248
- 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
|
|
61
|
-
var e_1,
|
|
62
|
-
return tslib_1.__generator(this, function (
|
|
63
|
-
switch (
|
|
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
|
-
|
|
66
|
-
|
|
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
|
-
|
|
69
|
-
|
|
70
|
-
|
|
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 (!!
|
|
73
|
-
entityClass =
|
|
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.
|
|
81
|
+
return [4 /*yield*/, filter_consumer_bridge_to_sql_request_1.dbNamesOf(entity)];
|
|
76
82
|
case 3:
|
|
77
|
-
e =
|
|
78
|
-
|
|
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
|
-
|
|
89
|
+
_d.trys.push([4, 9, , 10]);
|
|
81
90
|
if (!!entity.options.sqlExpression) return [3 /*break*/, 8];
|
|
82
|
-
return [4 /*yield*/, e
|
|
91
|
+
return [4 /*yield*/, e.$entityName];
|
|
83
92
|
case 5:
|
|
84
|
-
if (!((
|
|
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
|
-
|
|
96
|
+
_d.sent();
|
|
88
97
|
return [4 /*yield*/, this.verifyAllColumns(entity)];
|
|
89
98
|
case 7:
|
|
90
|
-
|
|
91
|
-
|
|
99
|
+
_d.sent();
|
|
100
|
+
_d.label = 8;
|
|
92
101
|
case 8: return [3 /*break*/, 10];
|
|
93
102
|
case 9:
|
|
94
|
-
err_1 =
|
|
95
|
-
|
|
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
|
-
|
|
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 =
|
|
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 (
|
|
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:
|
|
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.
|
|
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
|
|
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 (!
|
|
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
|
|
155
|
+
result += e.$dbNameOf(x) + ' serial';
|
|
144
156
|
else {
|
|
145
|
-
result += postgresColumnSyntax(x, e
|
|
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
|
|
160
|
-
|
|
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.
|
|
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 (
|
|
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
|
|
192
|
-
return [4 /*yield*/, cmd.execute("select 1 \n FROM information_schema.columns \n WHERE table_name=" + cmd.addParameterAndReturnSqlToken((e
|
|
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
|
|
196
|
-
|
|
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.
|
|
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
|
|
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 (!!
|
|
236
|
-
if (!!cols.includes(e
|
|
237
|
-
sql = "alter table " + e
|
|
238
|
-
|
|
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;
|
package/remult-express.d.ts
CHANGED
|
@@ -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 {
|
|
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
|
|
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
|
-
|
|
17
|
-
|
|
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.
|
|
3
|
+
exports.SseSubscriptionServer = exports.remultExpress = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
|
-
var express = require("express");
|
|
6
|
-
var
|
|
7
|
-
var
|
|
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
|
-
|
|
24
|
+
if (!options.subscriptionServer) {
|
|
25
|
+
options.subscriptionServer = new SseSubscriptionServer();
|
|
26
|
+
}
|
|
27
|
+
var server = index_1.createRemultServer(options);
|
|
26
28
|
server.registerRouter(app);
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
};
|
|
29
|
+
var canRegisterRoute = options.subscriptionServer;
|
|
30
|
+
if (canRegisterRoute.registerRoutes) {
|
|
31
|
+
canRegisterRoute.registerRoutes(app, options.rootPath, server);
|
|
31
32
|
}
|
|
32
|
-
|
|
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
|
|
126
|
-
function
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
|
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 =
|
|
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.
|
|
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); },
|
package/remult-knex/index.d.ts
CHANGED
|
@@ -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
|
|
14
|
-
|
|
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
|
|
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>;
|