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
@@ -0,0 +1,236 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DataProviderLiveQueryStorage = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var initDataProvider_1 = require("../server/initDataProvider");
6
+ var context_1 = require("../src/context");
7
+ var remult3_1 = require("../src/remult3");
8
+ var DataProviderLiveQueryStorage = /** @class */ (function () {
9
+ function DataProviderLiveQueryStorage(dataProvider) {
10
+ this.dataProvider = initDataProvider_1.initDataProvider(dataProvider);
11
+ this.repo = this.dataProvider.then(function (dp) {
12
+ return new context_1.Remult(dp).repo(LiveQueryStorageEntity);
13
+ });
14
+ }
15
+ DataProviderLiveQueryStorage.prototype.ensureSchema = function () {
16
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
17
+ var _a, _b;
18
+ return tslib_1.__generator(this, function (_c) {
19
+ switch (_c.label) {
20
+ case 0: return [4 /*yield*/, this.dataProvider];
21
+ case 1:
22
+ _b = (_a = (_c.sent())).ensureSchema;
23
+ return [4 /*yield*/, this.repo];
24
+ case 2: return [4 /*yield*/, _b.apply(_a, [[(_c.sent()).metadata]])];
25
+ case 3:
26
+ _c.sent();
27
+ return [2 /*return*/];
28
+ }
29
+ });
30
+ });
31
+ };
32
+ DataProviderLiveQueryStorage.prototype.add = function (_a) {
33
+ var id = _a.id, entityKey = _a.entityKey, data = _a.data;
34
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
35
+ var _this = this;
36
+ return tslib_1.__generator(this, function (_b) {
37
+ switch (_b.label) {
38
+ case 0: return [4 /*yield*/, this.repo.then(function (repo) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
39
+ var q;
40
+ return tslib_1.__generator(this, function (_a) {
41
+ switch (_a.label) {
42
+ case 0: return [4 /*yield*/, repo.findId(id, { createIfNotFound: true })];
43
+ case 1:
44
+ q = _a.sent();
45
+ return [4 /*yield*/, q.assign({ entityKey: entityKey, data: data }).save()];
46
+ case 2:
47
+ _a.sent();
48
+ return [2 /*return*/];
49
+ }
50
+ });
51
+ }); })];
52
+ case 1:
53
+ _b.sent();
54
+ return [2 /*return*/];
55
+ }
56
+ });
57
+ });
58
+ };
59
+ DataProviderLiveQueryStorage.prototype.remove = function (queryId) {
60
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
61
+ return tslib_1.__generator(this, function (_a) {
62
+ switch (_a.label) {
63
+ case 0: return [4 /*yield*/, this.repo.then(function (repo) { return repo.delete(queryId); }).catch(function () { })];
64
+ case 1:
65
+ _a.sent();
66
+ return [2 /*return*/];
67
+ }
68
+ });
69
+ });
70
+ };
71
+ DataProviderLiveQueryStorage.prototype.forEach = function (entityKey, callback) {
72
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
73
+ var repo, d, iso, _loop_1, _a, _b, query, e_1_1;
74
+ var e_1, _c;
75
+ var _this = this;
76
+ return tslib_1.__generator(this, function (_d) {
77
+ switch (_d.label) {
78
+ case 0: return [4 /*yield*/, this.repo];
79
+ case 1:
80
+ repo = _d.sent();
81
+ d = new Date();
82
+ d.setMinutes(d.getMinutes() - 5);
83
+ iso = d.toISOString();
84
+ _loop_1 = function (query) {
85
+ return tslib_1.__generator(this, function (_a) {
86
+ switch (_a.label) {
87
+ case 0:
88
+ if (!(query.lastUsedIso < iso)) return [3 /*break*/, 2];
89
+ return [4 /*yield*/, repo.delete(query)];
90
+ case 1:
91
+ _a.sent();
92
+ return [3 /*break*/, 4];
93
+ case 2: return [4 /*yield*/, callback({
94
+ query: query, setData: function (data) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
95
+ return tslib_1.__generator(this, function (_a) {
96
+ switch (_a.label) {
97
+ case 0:
98
+ query.data = data;
99
+ return [4 /*yield*/, repo.save(query)];
100
+ case 1:
101
+ _a.sent();
102
+ return [2 /*return*/];
103
+ }
104
+ });
105
+ }); },
106
+ })];
107
+ case 3:
108
+ _a.sent();
109
+ _a.label = 4;
110
+ case 4: return [2 /*return*/];
111
+ }
112
+ });
113
+ };
114
+ _d.label = 2;
115
+ case 2:
116
+ _d.trys.push([2, 8, 9, 10]);
117
+ return [4 /*yield*/, repo.find({ where: { entityKey: entityKey } })];
118
+ case 3:
119
+ _a = tslib_1.__values.apply(void 0, [_d.sent()]), _b = _a.next();
120
+ _d.label = 4;
121
+ case 4:
122
+ if (!!_b.done) return [3 /*break*/, 7];
123
+ query = _b.value;
124
+ return [5 /*yield**/, _loop_1(query)];
125
+ case 5:
126
+ _d.sent();
127
+ _d.label = 6;
128
+ case 6:
129
+ _b = _a.next();
130
+ return [3 /*break*/, 4];
131
+ case 7: return [3 /*break*/, 10];
132
+ case 8:
133
+ e_1_1 = _d.sent();
134
+ e_1 = { error: e_1_1 };
135
+ return [3 /*break*/, 10];
136
+ case 9:
137
+ try {
138
+ if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
139
+ }
140
+ finally { if (e_1) throw e_1.error; }
141
+ return [7 /*endfinally*/];
142
+ case 10: return [2 /*return*/];
143
+ }
144
+ });
145
+ });
146
+ };
147
+ DataProviderLiveQueryStorage.prototype.keepAliveAndReturnUnknownQueryIds = function (queryIds) {
148
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
149
+ var repo, _loop_2, _a, _b, query, e_2_1;
150
+ var e_2, _c;
151
+ return tslib_1.__generator(this, function (_d) {
152
+ switch (_d.label) {
153
+ case 0: return [4 /*yield*/, this.repo];
154
+ case 1:
155
+ repo = _d.sent();
156
+ _loop_2 = function (query) {
157
+ return tslib_1.__generator(this, function (_a) {
158
+ switch (_a.label) {
159
+ case 0:
160
+ query.lastUsedIso = new Date().toISOString();
161
+ return [4 /*yield*/, repo.save(query)];
162
+ case 1:
163
+ _a.sent();
164
+ queryIds = queryIds.filter(function (x) { return x !== query.id; });
165
+ return [2 /*return*/];
166
+ }
167
+ });
168
+ };
169
+ _d.label = 2;
170
+ case 2:
171
+ _d.trys.push([2, 8, 9, 10]);
172
+ return [4 /*yield*/, repo.find({ where: { id: queryIds } })];
173
+ case 3:
174
+ _a = tslib_1.__values.apply(void 0, [_d.sent()]), _b = _a.next();
175
+ _d.label = 4;
176
+ case 4:
177
+ if (!!_b.done) return [3 /*break*/, 7];
178
+ query = _b.value;
179
+ return [5 /*yield**/, _loop_2(query)];
180
+ case 5:
181
+ _d.sent();
182
+ _d.label = 6;
183
+ case 6:
184
+ _b = _a.next();
185
+ return [3 /*break*/, 4];
186
+ case 7: return [3 /*break*/, 10];
187
+ case 8:
188
+ e_2_1 = _d.sent();
189
+ e_2 = { error: e_2_1 };
190
+ return [3 /*break*/, 10];
191
+ case 9:
192
+ try {
193
+ if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
194
+ }
195
+ finally { if (e_2) throw e_2.error; }
196
+ return [7 /*endfinally*/];
197
+ case 10: return [2 /*return*/, queryIds];
198
+ }
199
+ });
200
+ });
201
+ };
202
+ return DataProviderLiveQueryStorage;
203
+ }());
204
+ exports.DataProviderLiveQueryStorage = DataProviderLiveQueryStorage;
205
+ var LiveQueryStorageEntity = /** @class */ (function (_super) {
206
+ tslib_1.__extends(LiveQueryStorageEntity, _super);
207
+ function LiveQueryStorageEntity() {
208
+ var _this = _super !== null && _super.apply(this, arguments) || this;
209
+ _this.id = '';
210
+ _this.entityKey = '';
211
+ _this.lastUsedIso = new Date().toISOString();
212
+ return _this;
213
+ }
214
+ tslib_1.__decorate([
215
+ remult3_1.Fields.string(),
216
+ tslib_1.__metadata("design:type", Object)
217
+ ], LiveQueryStorageEntity.prototype, "id", void 0);
218
+ tslib_1.__decorate([
219
+ remult3_1.Fields.string(),
220
+ tslib_1.__metadata("design:type", Object)
221
+ ], LiveQueryStorageEntity.prototype, "entityKey", void 0);
222
+ tslib_1.__decorate([
223
+ remult3_1.Fields.object(),
224
+ tslib_1.__metadata("design:type", Object)
225
+ ], LiveQueryStorageEntity.prototype, "data", void 0);
226
+ tslib_1.__decorate([
227
+ remult3_1.Fields.string(),
228
+ tslib_1.__metadata("design:type", Object)
229
+ ], LiveQueryStorageEntity.prototype, "lastUsedIso", void 0);
230
+ LiveQueryStorageEntity = tslib_1.__decorate([
231
+ remult3_1.Entity(undefined, {
232
+ dbName: 'remult_live_query_storage'
233
+ })
234
+ ], LiveQueryStorageEntity);
235
+ return LiveQueryStorageEntity;
236
+ }(remult3_1.EntityBase));
package/myLog.d.ts ADDED
@@ -0,0 +1 @@
1
+ export declare function writeToLog(what: any): Promise<void>;
package/myLog.js ADDED
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.writeToLog = void 0;
4
+ var tslib_1 = require("tslib");
5
+ function writeToLog(what) {
6
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
7
+ return tslib_1.__generator(this, function (_a) {
8
+ switch (_a.label) {
9
+ case 0:
10
+ if (typeof what !== "string")
11
+ what = JSON.stringify(what, undefined, 2);
12
+ return [4 /*yield*/, (Promise.resolve().then(function () { return tslib_1.__importStar(require('fs')); }))];
13
+ case 1:
14
+ (_a.sent()).appendFileSync('./tmp/test.log', what + '\n');
15
+ return [2 /*return*/];
16
+ }
17
+ });
18
+ });
19
+ }
20
+ exports.writeToLog = writeToLog;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "remult",
3
- "version": "0.17.2",
3
+ "version": "0.18.0",
4
4
  "description": "A CRUD framework for full-stack TypeScript",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -17,6 +17,7 @@
17
17
  },
18
18
  "dependencies": {
19
19
  "uuid": "^8.3.2",
20
+ "cuid": "^2.1.8",
20
21
  "reflect-metadata": "^0.1.13",
21
22
  "tslib": "^2.3.1"
22
23
  },
@@ -37,6 +38,14 @@
37
38
  },
38
39
  "import": "./esm/remult-express.js"
39
40
  },
41
+ "./remult-next": {
42
+ "require": "./remult-next.js",
43
+ "node": {
44
+ "require": "./remult-next.js",
45
+ "import": "./remult-next.js"
46
+ },
47
+ "import": "./esm/remult-next.js"
48
+ },
40
49
  "./server": {
41
50
  "require": "./server/index.js",
42
51
  "node": {
@@ -101,6 +110,14 @@
101
110
  },
102
111
  "import": "./esm/remult-mongo.js"
103
112
  },
113
+ "./ably": {
114
+ "require": "./ably.js",
115
+ "node": {
116
+ "require": "./ably.js",
117
+ "import": "./ably.js"
118
+ },
119
+ "import": "./esm/ably.js"
120
+ },
104
121
  "./graphql": {
105
122
  "require": "./graphql.js",
106
123
  "node": {
@@ -1,4 +1,5 @@
1
- import { PoolConfig, QueryResult } from 'pg';
1
+ import { ClientBase, PoolConfig, QueryResult } from 'pg';
2
+ import { Remult } from '../src/context';
2
3
  import { EntityMetadata } from '../src/remult3';
3
4
  import { SqlCommand, SqlImplementation } from '../src/sql-command';
4
5
  import { SqlDatabase } from '../src/data-providers/sql-database';
@@ -10,10 +11,12 @@ export interface PostgresClient extends PostgresCommandSource {
10
11
  }
11
12
  export declare class PostgresDataProvider implements SqlImplementation {
12
13
  private pool;
14
+ static getDb(remult?: Remult): ClientBase;
13
15
  entityIsUsedForTheFirstTime(entity: EntityMetadata): Promise<void>;
14
16
  getLimitSqlSyntax(limit: number, offset: number): string;
15
17
  createCommand(): SqlCommand;
16
18
  constructor(pool: PostgresPool);
19
+ ensureSchema(entities: EntityMetadata<any>[]): Promise<void>;
17
20
  transaction(action: (dataProvider: SqlImplementation) => Promise<void>): Promise<void>;
18
21
  }
19
22
  export interface PostgresCommandSource {
@@ -23,6 +26,5 @@ export declare function createPostgresConnection(options?: {
23
26
  connectionString?: string;
24
27
  sslInDev?: boolean;
25
28
  configuration?: "heroku" | PoolConfig;
26
- autoCreateTables?: boolean;
27
29
  }): Promise<SqlDatabase>;
28
30
  export declare function preparePostgresQueueStorage(sql: SqlDatabase): Promise<import("../server/expressBridge").EntityQueueStorage>;
@@ -10,6 +10,14 @@ var PostgresDataProvider = /** @class */ (function () {
10
10
  function PostgresDataProvider(pool) {
11
11
  this.pool = pool;
12
12
  }
13
+ PostgresDataProvider.getDb = function (remult) {
14
+ var sql = sql_database_1.SqlDatabase.getDb(remult);
15
+ var me = sql._getSourceSql();
16
+ if (!me.pool) {
17
+ throw "the data provider is not a PostgresDataProvider";
18
+ }
19
+ return me.pool;
20
+ };
13
21
  PostgresDataProvider.prototype.entityIsUsedForTheFirstTime = function (entity) {
14
22
  return tslib_1.__awaiter(this, void 0, void 0, function () {
15
23
  return tslib_1.__generator(this, function (_a) {
@@ -23,6 +31,22 @@ var PostgresDataProvider = /** @class */ (function () {
23
31
  PostgresDataProvider.prototype.createCommand = function () {
24
32
  return new PostgresBridgeToSQLCommand(this.pool);
25
33
  };
34
+ PostgresDataProvider.prototype.ensureSchema = function (entities) {
35
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
36
+ var db, sb;
37
+ return tslib_1.__generator(this, function (_a) {
38
+ switch (_a.label) {
39
+ case 0:
40
+ db = new sql_database_1.SqlDatabase(this);
41
+ sb = new schema_builder_1.PostgresSchemaBuilder(db);
42
+ return [4 /*yield*/, sb.ensureSchema(entities)];
43
+ case 1:
44
+ _a.sent();
45
+ return [2 /*return*/];
46
+ }
47
+ });
48
+ });
49
+ };
26
50
  PostgresDataProvider.prototype.transaction = function (action) {
27
51
  return tslib_1.__awaiter(this, void 0, void 0, function () {
28
52
  var client, err_1;
@@ -41,7 +65,9 @@ var PostgresDataProvider = /** @class */ (function () {
41
65
  createCommand: function () { return new PostgresBridgeToSQLCommand(client); },
42
66
  entityIsUsedForTheFirstTime: this.entityIsUsedForTheFirstTime,
43
67
  transaction: function () { throw "nested transactions not allowed"; },
44
- getLimitSqlSyntax: this.getLimitSqlSyntax
68
+ getLimitSqlSyntax: this.getLimitSqlSyntax,
69
+ //@ts-ignore
70
+ pool: client
45
71
  })];
46
72
  case 4:
47
73
  _a.sent();
@@ -95,39 +121,31 @@ function createPostgresConnection(options) {
95
121
  return tslib_1.__awaiter(this, void 0, void 0, function () {
96
122
  var config, db, remult;
97
123
  return tslib_1.__generator(this, function (_a) {
98
- switch (_a.label) {
99
- case 0:
100
- if (!options)
101
- options = {};
102
- config = {};
103
- if (options.configuration)
104
- if (options.configuration == "heroku") {
105
- config = {
106
- connectionString: process.env.DATABASE_URL,
107
- ssl: process.env.NODE_ENV !== "production" && !options.sslInDev ? false : {
108
- rejectUnauthorized: false
109
- }
110
- };
124
+ if (!options)
125
+ options = {};
126
+ config = {};
127
+ if (options.configuration)
128
+ if (options.configuration == "heroku") {
129
+ config = {
130
+ connectionString: process.env.DATABASE_URL,
131
+ ssl: process.env.NODE_ENV !== "production" && !options.sslInDev ? false : {
132
+ rejectUnauthorized: false
111
133
  }
112
- else
113
- config = options.configuration;
114
- else {
115
- if (!options.connectionString)
116
- options.connectionString = process.env.DATABASE_URL;
117
- }
118
- if (!config.connectionString && options.connectionString) {
119
- config.connectionString = options.connectionString;
120
- }
121
- db = new sql_database_1.SqlDatabase(new PostgresDataProvider(new pg_1.Pool(config)));
122
- remult = new context_1.Remult();
123
- remult.dataProvider = (db);
124
- if (!(options.autoCreateTables === undefined || options.autoCreateTables)) return [3 /*break*/, 2];
125
- return [4 /*yield*/, schema_builder_1.verifyStructureOfAllEntities(db, remult)];
126
- case 1:
127
- _a.sent();
128
- _a.label = 2;
129
- case 2: return [2 /*return*/, db];
134
+ };
135
+ }
136
+ else
137
+ config = options.configuration;
138
+ else {
139
+ if (!options.connectionString)
140
+ options.connectionString = process.env.DATABASE_URL;
130
141
  }
142
+ if (!config.connectionString && options.connectionString) {
143
+ config.connectionString = options.connectionString;
144
+ }
145
+ db = new sql_database_1.SqlDatabase(new PostgresDataProvider(new pg_1.Pool(config)));
146
+ remult = new context_1.Remult();
147
+ remult.dataProvider = (db);
148
+ return [2 /*return*/, db];
131
149
  });
132
150
  });
133
151
  }
@@ -140,18 +158,15 @@ function preparePostgresQueueStorage(sql) {
140
158
  case 0:
141
159
  c = new context_1.Remult();
142
160
  c.dataProvider = (sql);
143
- return [4 /*yield*/, Promise.resolve().then(function () { return require('../server/expressBridge'); })];
161
+ return [4 /*yield*/, Promise.resolve().then(function () { return tslib_1.__importStar(require('../server/expressBridge')); })];
144
162
  case 1:
145
163
  JobsInQueueEntity = (_a.sent()).JobsInQueueEntity;
146
164
  e = c.repo(JobsInQueueEntity);
147
- return [4 /*yield*/, new schema_builder_1.PostgresSchemaBuilder(sql).createIfNotExist(e.metadata)];
165
+ return [4 /*yield*/, sql.ensureSchema([e.metadata])];
148
166
  case 2:
149
167
  _a.sent();
150
- return [4 /*yield*/, new schema_builder_1.PostgresSchemaBuilder(sql).verifyAllColumns(e.metadata)];
151
- case 3:
152
- _a.sent();
153
- return [4 /*yield*/, Promise.resolve().then(function () { return require('../server/expressBridge'); })];
154
- case 4: return [2 /*return*/, new (_a.sent()).EntityQueueStorage(c.repo(JobsInQueueEntity))];
168
+ return [4 /*yield*/, Promise.resolve().then(function () { return tslib_1.__importStar(require('../server/expressBridge')); })];
169
+ case 3: return [2 /*return*/, new (_a.sent()).EntityQueueStorage(c.repo(JobsInQueueEntity))];
155
170
  }
156
171
  });
157
172
  });
@@ -6,7 +6,8 @@ export declare function postgresColumnSyntax(x: FieldMetadata, dbName: string):
6
6
  export declare function verifyStructureOfAllEntities(db: SqlDatabase, remult: Remult): Promise<void>;
7
7
  export declare class PostgresSchemaBuilder {
8
8
  private pool;
9
- verifyStructureOfAllEntities(remult: Remult): Promise<void>;
9
+ verifyStructureOfAllEntities(remult?: Remult): Promise<void>;
10
+ ensureSchema(entities: EntityMetadata<any>[]): Promise<void>;
10
11
  createIfNotExist(entity: EntityMetadata): Promise<void>;
11
12
  addColumnIfNotExist<T extends EntityMetadata>(entity: T, c: ((e: T) => FieldMetadata)): Promise<void>;
12
13
  verifyAllColumns<T extends EntityMetadata>(entity: T): Promise<void>;