remult 0.27.11 → 0.27.13
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/esm/index.js +0 -1
- package/esm/live-query/data-provider-live-query-storage.js +0 -2
- package/esm/postgres/schema-builder.js +0 -41
- package/esm/remult-duckdb.js +7 -12
- package/esm/remult-knex/index.js +0 -7
- package/esm/remult-mongo.js +33 -0
- package/esm/remult-sqlite-core.js +33 -5
- package/esm/server/get-remult-admin-html.js +1 -1
- package/esm/server/remult-admin.js +2 -0
- package/esm/server/remult-api-server.js +4 -5
- package/esm/src/data-providers/array-entity-data-provider.js +26 -11
- package/esm/src/data-providers/in-memory-database.js +1 -1
- package/esm/src/data-providers/sql-database.js +2 -25
- package/esm/src/filter/filter-interfaces.js +1 -0
- package/esm/src/remult3/RepositoryImplementation.js +15 -4
- package/esm/src/remult3/remult3.js +0 -3
- package/index.d.ts +0 -1
- package/index.js +1 -3
- package/live-query/data-provider-live-query-storage.js +0 -2
- package/package.json +1 -1
- package/postgres/schema-builder.d.ts +0 -4
- package/postgres/schema-builder.js +15 -118
- package/remult-duckdb.d.ts +1 -1
- package/remult-duckdb.js +7 -12
- package/remult-knex/index.d.ts +0 -2
- package/remult-knex/index.js +0 -18
- package/remult-mongo.d.ts +2 -1
- package/remult-mongo.js +128 -37
- package/remult-sqlite-core.d.ts +2 -1
- package/remult-sqlite-core.js +116 -29
- package/server/get-remult-admin-html.js +1 -1
- package/server/remult-admin.d.ts +4 -0
- package/server/remult-admin.js +12 -10
- package/server/remult-api-server.js +14 -14
- package/src/data-providers/array-entity-data-provider.js +82 -37
- package/src/data-providers/in-memory-database.js +1 -1
- package/src/data-providers/sql-database.js +10 -69
- package/src/entity.d.ts +4 -4
- package/src/filter/filter-interfaces.js +1 -0
- package/src/remult3/RepositoryImplementation.js +15 -4
- package/src/remult3/remult3.d.ts +17 -2
- package/src/remult3/remult3.js +0 -3
- package/esm/src/data-providers/web-sql-data-provider.js +0 -140
- package/src/data-providers/web-sql-data-provider.d.ts +0 -20
- package/src/data-providers/web-sql-data-provider.js +0 -228
package/remult-mongo.d.ts
CHANGED
|
@@ -14,7 +14,8 @@ export declare class MongoDataProvider implements DataProvider {
|
|
|
14
14
|
db: Db;
|
|
15
15
|
session: ClientSession | undefined;
|
|
16
16
|
};
|
|
17
|
-
|
|
17
|
+
ensureSchema(entities: EntityMetadata[]): Promise<void>;
|
|
18
|
+
getEntityDataProvider(entity: EntityMetadata): EntityDataProvider;
|
|
18
19
|
transaction(action: (dataProvider: DataProvider) => Promise<void>): Promise<void>;
|
|
19
20
|
static filterToRaw<entityType>(entity: RepositoryOverloads<entityType>, condition: EntityFilter<entityType>): Promise<{
|
|
20
21
|
$and: any[];
|
package/remult-mongo.js
CHANGED
|
@@ -24,6 +24,43 @@ var MongoDataProvider = /** @class */ (function () {
|
|
|
24
24
|
throw 'the data provider is not a MongoDataProvider';
|
|
25
25
|
return { db: r.db, session: r.session };
|
|
26
26
|
};
|
|
27
|
+
MongoDataProvider.prototype.ensureSchema = function (entities) {
|
|
28
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
29
|
+
var entities_1, entities_1_1, entity, m, e_1_1;
|
|
30
|
+
var e_1, _a;
|
|
31
|
+
return tslib_1.__generator(this, function (_b) {
|
|
32
|
+
switch (_b.label) {
|
|
33
|
+
case 0:
|
|
34
|
+
_b.trys.push([0, 5, 6, 7]);
|
|
35
|
+
entities_1 = tslib_1.__values(entities), entities_1_1 = entities_1.next();
|
|
36
|
+
_b.label = 1;
|
|
37
|
+
case 1:
|
|
38
|
+
if (!!entities_1_1.done) return [3 /*break*/, 4];
|
|
39
|
+
entity = entities_1_1.value;
|
|
40
|
+
m = new MongoEntityDataProvider(this.db, entity, this.session);
|
|
41
|
+
return [4 /*yield*/, m.ensureSchema()];
|
|
42
|
+
case 2:
|
|
43
|
+
_b.sent();
|
|
44
|
+
_b.label = 3;
|
|
45
|
+
case 3:
|
|
46
|
+
entities_1_1 = entities_1.next();
|
|
47
|
+
return [3 /*break*/, 1];
|
|
48
|
+
case 4: return [3 /*break*/, 7];
|
|
49
|
+
case 5:
|
|
50
|
+
e_1_1 = _b.sent();
|
|
51
|
+
e_1 = { error: e_1_1 };
|
|
52
|
+
return [3 /*break*/, 7];
|
|
53
|
+
case 6:
|
|
54
|
+
try {
|
|
55
|
+
if (entities_1_1 && !entities_1_1.done && (_a = entities_1.return)) _a.call(entities_1);
|
|
56
|
+
}
|
|
57
|
+
finally { if (e_1) throw e_1.error; }
|
|
58
|
+
return [7 /*endfinally*/];
|
|
59
|
+
case 7: return [2 /*return*/];
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
};
|
|
27
64
|
MongoDataProvider.prototype.getEntityDataProvider = function (entity) {
|
|
28
65
|
return new MongoEntityDataProvider(this.db, entity, this.session);
|
|
29
66
|
};
|
|
@@ -108,29 +145,83 @@ var MongoEntityDataProvider = /** @class */ (function () {
|
|
|
108
145
|
this.entity = entity;
|
|
109
146
|
this.session = session;
|
|
110
147
|
}
|
|
148
|
+
MongoEntityDataProvider.prototype.ensureSchema = function () {
|
|
149
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
150
|
+
var _a, collection, e, index, _b, _c, f, err_2;
|
|
151
|
+
var e_2, _d;
|
|
152
|
+
return tslib_1.__generator(this, function (_e) {
|
|
153
|
+
switch (_e.label) {
|
|
154
|
+
case 0: return [4 /*yield*/, this.collection()];
|
|
155
|
+
case 1:
|
|
156
|
+
_a = _e.sent(), collection = _a.collection, e = _a.e;
|
|
157
|
+
return [4 /*yield*/, this.db.collections()];
|
|
158
|
+
case 2:
|
|
159
|
+
if (!!(_e.sent()).find(function (x) { return x.collectionName == e.$entityName; })) return [3 /*break*/, 7];
|
|
160
|
+
return [4 /*yield*/, this.db.createCollection(e.$entityName)];
|
|
161
|
+
case 3:
|
|
162
|
+
_e.sent();
|
|
163
|
+
if (!(this.entity.idMetadata.field &&
|
|
164
|
+
e.$dbNameOf(this.entity.idMetadata.field) != '_id')) return [3 /*break*/, 7];
|
|
165
|
+
index = {};
|
|
166
|
+
try {
|
|
167
|
+
for (_b = tslib_1.__values(this.entity.idMetadata.fields), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
168
|
+
f = _c.value;
|
|
169
|
+
index[e.$dbNameOf(f)] = 1;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
catch (e_2_1) { e_2 = { error: e_2_1 }; }
|
|
173
|
+
finally {
|
|
174
|
+
try {
|
|
175
|
+
if (_c && !_c.done && (_d = _b.return)) _d.call(_b);
|
|
176
|
+
}
|
|
177
|
+
finally { if (e_2) throw e_2.error; }
|
|
178
|
+
}
|
|
179
|
+
_e.label = 4;
|
|
180
|
+
case 4:
|
|
181
|
+
_e.trys.push([4, 6, , 7]);
|
|
182
|
+
return [4 /*yield*/, collection.createIndex(index, { unique: true })];
|
|
183
|
+
case 5:
|
|
184
|
+
_e.sent();
|
|
185
|
+
return [3 /*break*/, 7];
|
|
186
|
+
case 6:
|
|
187
|
+
err_2 = _e.sent();
|
|
188
|
+
throw err_2;
|
|
189
|
+
case 7: return [2 /*return*/];
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
});
|
|
193
|
+
};
|
|
111
194
|
MongoEntityDataProvider.prototype.translateFromDb = function (row, nameProvider) {
|
|
112
|
-
var
|
|
195
|
+
var e_3, _a;
|
|
113
196
|
var result = {};
|
|
114
197
|
try {
|
|
115
198
|
for (var _b = tslib_1.__values(this.entity.fields), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
116
199
|
var col = _c.value;
|
|
117
200
|
var val = row[nameProvider.$dbNameOf(col)];
|
|
201
|
+
if (val === undefined) {
|
|
202
|
+
if (!col.allowNull) {
|
|
203
|
+
if (col.valueType === String)
|
|
204
|
+
val = '';
|
|
205
|
+
}
|
|
206
|
+
else
|
|
207
|
+
val = null;
|
|
208
|
+
}
|
|
118
209
|
if (isNull(val))
|
|
119
210
|
val = null;
|
|
120
211
|
result[col.key] = fromDb(col, val);
|
|
121
212
|
}
|
|
122
213
|
}
|
|
123
|
-
catch (
|
|
214
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
124
215
|
finally {
|
|
125
216
|
try {
|
|
126
217
|
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
127
218
|
}
|
|
128
|
-
finally { if (
|
|
219
|
+
finally { if (e_3) throw e_3.error; }
|
|
129
220
|
}
|
|
130
221
|
return result;
|
|
131
222
|
};
|
|
132
223
|
MongoEntityDataProvider.prototype.translateToDb = function (row, nameProvider) {
|
|
133
|
-
var
|
|
224
|
+
var e_4, _a;
|
|
134
225
|
var result = {};
|
|
135
226
|
try {
|
|
136
227
|
for (var _b = tslib_1.__values(this.entity.fields), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
@@ -141,12 +232,12 @@ var MongoEntityDataProvider = /** @class */ (function () {
|
|
|
141
232
|
result[nameProvider.$dbNameOf(col)] = val;
|
|
142
233
|
}
|
|
143
234
|
}
|
|
144
|
-
catch (
|
|
235
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
145
236
|
finally {
|
|
146
237
|
try {
|
|
147
238
|
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
148
239
|
}
|
|
149
|
-
finally { if (
|
|
240
|
+
finally { if (e_4) throw e_4.error; }
|
|
150
241
|
}
|
|
151
242
|
return result;
|
|
152
243
|
};
|
|
@@ -172,7 +263,7 @@ var MongoEntityDataProvider = /** @class */ (function () {
|
|
|
172
263
|
MongoEntityDataProvider.prototype.groupBy = function (options) {
|
|
173
264
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
174
265
|
var _a, collection, e, x, pipeLine, where, processResultRow, $group, $addFields, _loop_1, _b, _c, element, _loop_2, GroupByOperators_1, GroupByOperators_1_1, operator, sort, _d, _e, x_1, direction, r, r2;
|
|
175
|
-
var
|
|
266
|
+
var e_5, _f, e_6, _g, e_7, _h;
|
|
176
267
|
return tslib_1.__generator(this, function (_j) {
|
|
177
268
|
switch (_j.label) {
|
|
178
269
|
case 0: return [4 /*yield*/, this.collection()];
|
|
@@ -213,19 +304,19 @@ var MongoEntityDataProvider = /** @class */ (function () {
|
|
|
213
304
|
_loop_1(element);
|
|
214
305
|
}
|
|
215
306
|
}
|
|
216
|
-
catch (
|
|
307
|
+
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
217
308
|
finally {
|
|
218
309
|
try {
|
|
219
310
|
if (_c && !_c.done && (_f = _b.return)) _f.call(_b);
|
|
220
311
|
}
|
|
221
|
-
finally { if (
|
|
312
|
+
finally { if (e_5) throw e_5.error; }
|
|
222
313
|
}
|
|
223
314
|
}
|
|
224
315
|
else {
|
|
225
316
|
$group._id = null;
|
|
226
317
|
}
|
|
227
318
|
_loop_2 = function (operator) {
|
|
228
|
-
var
|
|
319
|
+
var e_8, _k;
|
|
229
320
|
if (options === null || options === void 0 ? void 0 : options[operator]) {
|
|
230
321
|
var _loop_3 = function (element) {
|
|
231
322
|
var _o;
|
|
@@ -242,17 +333,17 @@ var MongoEntityDataProvider = /** @class */ (function () {
|
|
|
242
333
|
});
|
|
243
334
|
};
|
|
244
335
|
try {
|
|
245
|
-
for (var _l = (
|
|
336
|
+
for (var _l = (e_8 = void 0, tslib_1.__values(options[operator])), _m = _l.next(); !_m.done; _m = _l.next()) {
|
|
246
337
|
var element = _m.value;
|
|
247
338
|
_loop_3(element);
|
|
248
339
|
}
|
|
249
340
|
}
|
|
250
|
-
catch (
|
|
341
|
+
catch (e_8_1) { e_8 = { error: e_8_1 }; }
|
|
251
342
|
finally {
|
|
252
343
|
try {
|
|
253
344
|
if (_m && !_m.done && (_k = _l.return)) _k.call(_l);
|
|
254
345
|
}
|
|
255
|
-
finally { if (
|
|
346
|
+
finally { if (e_8) throw e_8.error; }
|
|
256
347
|
}
|
|
257
348
|
}
|
|
258
349
|
};
|
|
@@ -262,12 +353,12 @@ var MongoEntityDataProvider = /** @class */ (function () {
|
|
|
262
353
|
_loop_2(operator);
|
|
263
354
|
}
|
|
264
355
|
}
|
|
265
|
-
catch (
|
|
356
|
+
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
|
266
357
|
finally {
|
|
267
358
|
try {
|
|
268
359
|
if (GroupByOperators_1_1 && !GroupByOperators_1_1.done && (_g = GroupByOperators_1.return)) _g.call(GroupByOperators_1);
|
|
269
360
|
}
|
|
270
|
-
finally { if (
|
|
361
|
+
finally { if (e_6) throw e_6.error; }
|
|
271
362
|
}
|
|
272
363
|
if (options === null || options === void 0 ? void 0 : options.orderBy) {
|
|
273
364
|
sort = {};
|
|
@@ -288,12 +379,12 @@ var MongoEntityDataProvider = /** @class */ (function () {
|
|
|
288
379
|
}
|
|
289
380
|
}
|
|
290
381
|
}
|
|
291
|
-
catch (
|
|
382
|
+
catch (e_7_1) { e_7 = { error: e_7_1 }; }
|
|
292
383
|
finally {
|
|
293
384
|
try {
|
|
294
385
|
if (_e && !_e.done && (_h = _d.return)) _h.call(_d);
|
|
295
386
|
}
|
|
296
|
-
finally { if (
|
|
387
|
+
finally { if (e_7) throw e_7.error; }
|
|
297
388
|
}
|
|
298
389
|
pipeLine.push({ $sort: sort });
|
|
299
390
|
}
|
|
@@ -309,7 +400,7 @@ var MongoEntityDataProvider = /** @class */ (function () {
|
|
|
309
400
|
case 4:
|
|
310
401
|
r = _j.sent();
|
|
311
402
|
r2 = r.map(function (x) {
|
|
312
|
-
var
|
|
403
|
+
var e_9, _a;
|
|
313
404
|
var resultRow = {};
|
|
314
405
|
try {
|
|
315
406
|
for (var processResultRow_1 = tslib_1.__values(processResultRow), processResultRow_1_1 = processResultRow_1.next(); !processResultRow_1_1.done; processResultRow_1_1 = processResultRow_1.next()) {
|
|
@@ -317,12 +408,12 @@ var MongoEntityDataProvider = /** @class */ (function () {
|
|
|
317
408
|
f(x, resultRow);
|
|
318
409
|
}
|
|
319
410
|
}
|
|
320
|
-
catch (
|
|
411
|
+
catch (e_9_1) { e_9 = { error: e_9_1 }; }
|
|
321
412
|
finally {
|
|
322
413
|
try {
|
|
323
414
|
if (processResultRow_1_1 && !processResultRow_1_1.done && (_a = processResultRow_1.return)) _a.call(processResultRow_1);
|
|
324
415
|
}
|
|
325
|
-
finally { if (
|
|
416
|
+
finally { if (e_9) throw e_9.error; }
|
|
326
417
|
}
|
|
327
418
|
return resultRow;
|
|
328
419
|
});
|
|
@@ -334,7 +425,7 @@ var MongoEntityDataProvider = /** @class */ (function () {
|
|
|
334
425
|
MongoEntityDataProvider.prototype.find = function (options) {
|
|
335
426
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
336
427
|
var _a, collection, e, x, where, op, _b, _c, s, _d, _e;
|
|
337
|
-
var
|
|
428
|
+
var e_10, _f;
|
|
338
429
|
var _this = this;
|
|
339
430
|
return tslib_1.__generator(this, function (_g) {
|
|
340
431
|
switch (_g.label) {
|
|
@@ -364,12 +455,12 @@ var MongoEntityDataProvider = /** @class */ (function () {
|
|
|
364
455
|
op.sort[e.$dbNameOf(s.field)] = s.isDescending ? -1 : 1;
|
|
365
456
|
}
|
|
366
457
|
}
|
|
367
|
-
catch (
|
|
458
|
+
catch (e_10_1) { e_10 = { error: e_10_1 }; }
|
|
368
459
|
finally {
|
|
369
460
|
try {
|
|
370
461
|
if (_c && !_c.done && (_f = _b.return)) _f.call(_b);
|
|
371
462
|
}
|
|
372
|
-
finally { if (
|
|
463
|
+
finally { if (e_10) throw e_10.error; }
|
|
373
464
|
}
|
|
374
465
|
}
|
|
375
466
|
_e = (_d = Promise).all;
|
|
@@ -386,7 +477,7 @@ var MongoEntityDataProvider = /** @class */ (function () {
|
|
|
386
477
|
MongoEntityDataProvider.prototype.update = function (id, data) {
|
|
387
478
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
388
479
|
var _a, collection, e, f, newR, keys, _b, _c, f_1, r, _d, _e;
|
|
389
|
-
var
|
|
480
|
+
var e_11, _f;
|
|
390
481
|
return tslib_1.__generator(this, function (_g) {
|
|
391
482
|
switch (_g.label) {
|
|
392
483
|
case 0: return [4 /*yield*/, this.collection()];
|
|
@@ -406,12 +497,12 @@ var MongoEntityDataProvider = /** @class */ (function () {
|
|
|
406
497
|
}
|
|
407
498
|
}
|
|
408
499
|
}
|
|
409
|
-
catch (
|
|
500
|
+
catch (e_11_1) { e_11 = { error: e_11_1 }; }
|
|
410
501
|
finally {
|
|
411
502
|
try {
|
|
412
503
|
if (_c && !_c.done && (_f = _b.return)) _f.call(_b);
|
|
413
504
|
}
|
|
414
|
-
finally { if (
|
|
505
|
+
finally { if (e_11) throw e_11.error; }
|
|
415
506
|
}
|
|
416
507
|
_e = (_d = collection).updateOne;
|
|
417
508
|
return [4 /*yield*/, f.resolveWhere()];
|
|
@@ -493,8 +584,8 @@ var FilterConsumerBridgeToMongo = /** @class */ (function () {
|
|
|
493
584
|
}
|
|
494
585
|
FilterConsumerBridgeToMongo.prototype.resolveWhere = function () {
|
|
495
586
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
496
|
-
var p, p_1, p_1_1, pr,
|
|
497
|
-
var
|
|
587
|
+
var p, p_1, p_1_1, pr, e_12_1;
|
|
588
|
+
var e_12, _a;
|
|
498
589
|
return tslib_1.__generator(this, function (_b) {
|
|
499
590
|
switch (_b.label) {
|
|
500
591
|
case 0:
|
|
@@ -504,7 +595,7 @@ var FilterConsumerBridgeToMongo = /** @class */ (function () {
|
|
|
504
595
|
_b.label = 1;
|
|
505
596
|
case 1:
|
|
506
597
|
_b.trys.push([1, 6, 7, 8]);
|
|
507
|
-
p_1 = (
|
|
598
|
+
p_1 = (e_12 = void 0, tslib_1.__values(p)), p_1_1 = p_1.next();
|
|
508
599
|
_b.label = 2;
|
|
509
600
|
case 2:
|
|
510
601
|
if (!!p_1_1.done) return [3 /*break*/, 5];
|
|
@@ -518,14 +609,14 @@ var FilterConsumerBridgeToMongo = /** @class */ (function () {
|
|
|
518
609
|
return [3 /*break*/, 2];
|
|
519
610
|
case 5: return [3 /*break*/, 8];
|
|
520
611
|
case 6:
|
|
521
|
-
|
|
522
|
-
|
|
612
|
+
e_12_1 = _b.sent();
|
|
613
|
+
e_12 = { error: e_12_1 };
|
|
523
614
|
return [3 /*break*/, 8];
|
|
524
615
|
case 7:
|
|
525
616
|
try {
|
|
526
617
|
if (p_1_1 && !p_1_1.done && (_a = p_1.return)) _a.call(p_1);
|
|
527
618
|
}
|
|
528
|
-
finally { if (
|
|
619
|
+
finally { if (e_12) throw e_12.error; }
|
|
529
620
|
return [7 /*endfinally*/];
|
|
530
621
|
case 8: return [3 /*break*/, 0];
|
|
531
622
|
case 9:
|
|
@@ -544,8 +635,8 @@ var FilterConsumerBridgeToMongo = /** @class */ (function () {
|
|
|
544
635
|
FilterConsumerBridgeToMongo.prototype.or = function (orElements) {
|
|
545
636
|
var _this = this;
|
|
546
637
|
this.promises.push((function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
547
|
-
var result, orElements_1, orElements_1_1, element, f, where,
|
|
548
|
-
var
|
|
638
|
+
var result, orElements_1, orElements_1_1, element, f, where, e_13_1;
|
|
639
|
+
var e_13, _a;
|
|
549
640
|
var _b;
|
|
550
641
|
return tslib_1.__generator(this, function (_c) {
|
|
551
642
|
switch (_c.label) {
|
|
@@ -576,14 +667,14 @@ var FilterConsumerBridgeToMongo = /** @class */ (function () {
|
|
|
576
667
|
return [3 /*break*/, 2];
|
|
577
668
|
case 5: return [3 /*break*/, 8];
|
|
578
669
|
case 6:
|
|
579
|
-
|
|
580
|
-
|
|
670
|
+
e_13_1 = _c.sent();
|
|
671
|
+
e_13 = { error: e_13_1 };
|
|
581
672
|
return [3 /*break*/, 8];
|
|
582
673
|
case 7:
|
|
583
674
|
try {
|
|
584
675
|
if (orElements_1_1 && !orElements_1_1.done && (_a = orElements_1.return)) _a.call(orElements_1);
|
|
585
676
|
}
|
|
586
|
-
finally { if (
|
|
677
|
+
finally { if (e_13) throw e_13.error; }
|
|
587
678
|
return [7 /*endfinally*/];
|
|
588
679
|
case 8:
|
|
589
680
|
this.result.push(function () { return ({
|
package/remult-sqlite-core.d.ts
CHANGED
|
@@ -15,10 +15,11 @@ export declare class SqliteCoreDataProvider implements SqlImplementation, CanBui
|
|
|
15
15
|
transaction(action: (sql: SqlImplementation) => Promise<void>): Promise<void>;
|
|
16
16
|
entityIsUsedForTheFirstTime(entity: EntityMetadata): Promise<void>;
|
|
17
17
|
ensureSchema(entities: EntityMetadata<any>[]): Promise<void>;
|
|
18
|
+
verifyAllColumns<T extends EntityMetadata>(entity: T): Promise<void>;
|
|
18
19
|
dropTable(entity: EntityMetadata): Promise<void>;
|
|
19
20
|
addColumnSqlSyntax(x: FieldMetadata, dbName: string, isAlterTable: boolean): string;
|
|
20
21
|
createTableIfNotExist(entity: EntityMetadata<any>): Promise<void>;
|
|
21
22
|
supportsJsonColumnType?: boolean;
|
|
22
|
-
getCreateTableSql(entity: EntityMetadata<any>): Promise<string>;
|
|
23
|
+
getCreateTableSql(entity: EntityMetadata<any>): Promise<string[]>;
|
|
23
24
|
wrapIdentifier(name: string): string;
|
|
24
25
|
}
|
package/remult-sqlite-core.js
CHANGED
|
@@ -22,14 +22,12 @@ var SqliteCoreDataProvider = /** @class */ (function () {
|
|
|
22
22
|
var self = this;
|
|
23
23
|
return {
|
|
24
24
|
createTable: function (entity) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
case
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
case 1:
|
|
32
|
-
_b.apply(_a, [_c.sent()]);
|
|
25
|
+
return tslib_1.__generator(this, function (_a) {
|
|
26
|
+
switch (_a.label) {
|
|
27
|
+
case 0: return [4 /*yield*/, self.getCreateTableSql(entity)];
|
|
28
|
+
case 1: return [4 /*yield*/, (_a.sent()).map(builder.addSql)];
|
|
29
|
+
case 2:
|
|
30
|
+
_a.sent();
|
|
33
31
|
return [2 /*return*/];
|
|
34
32
|
}
|
|
35
33
|
});
|
|
@@ -90,31 +88,91 @@ var SqliteCoreDataProvider = /** @class */ (function () {
|
|
|
90
88
|
return tslib_1.__generator(this, function (_b) {
|
|
91
89
|
switch (_b.label) {
|
|
92
90
|
case 0:
|
|
93
|
-
_b.trys.push([0,
|
|
91
|
+
_b.trys.push([0, 6, 7, 8]);
|
|
94
92
|
entities_1 = tslib_1.__values(entities), entities_1_1 = entities_1.next();
|
|
95
93
|
_b.label = 1;
|
|
96
94
|
case 1:
|
|
97
|
-
if (!!entities_1_1.done) return [3 /*break*/,
|
|
95
|
+
if (!!entities_1_1.done) return [3 /*break*/, 5];
|
|
98
96
|
entity = entities_1_1.value;
|
|
99
97
|
return [4 /*yield*/, this.createTableIfNotExist(entity)];
|
|
100
98
|
case 2:
|
|
101
99
|
_b.sent();
|
|
102
|
-
|
|
100
|
+
return [4 /*yield*/, this.verifyAllColumns(entity)];
|
|
103
101
|
case 3:
|
|
102
|
+
_b.sent();
|
|
103
|
+
_b.label = 4;
|
|
104
|
+
case 4:
|
|
104
105
|
entities_1_1 = entities_1.next();
|
|
105
106
|
return [3 /*break*/, 1];
|
|
106
|
-
case
|
|
107
|
-
case
|
|
107
|
+
case 5: return [3 /*break*/, 8];
|
|
108
|
+
case 6:
|
|
108
109
|
e_1_1 = _b.sent();
|
|
109
110
|
e_1 = { error: e_1_1 };
|
|
110
|
-
return [3 /*break*/,
|
|
111
|
-
case
|
|
111
|
+
return [3 /*break*/, 8];
|
|
112
|
+
case 7:
|
|
112
113
|
try {
|
|
113
114
|
if (entities_1_1 && !entities_1_1.done && (_a = entities_1.return)) _a.call(entities_1);
|
|
114
115
|
}
|
|
115
116
|
finally { if (e_1) throw e_1.error; }
|
|
116
117
|
return [7 /*endfinally*/];
|
|
117
|
-
case
|
|
118
|
+
case 8: return [2 /*return*/];
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
};
|
|
123
|
+
SqliteCoreDataProvider.prototype.verifyAllColumns = function (entity) {
|
|
124
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
125
|
+
var cmd, e, cols, _a, _b, col, colName, sql, e_2_1, err_2;
|
|
126
|
+
var e_2, _c;
|
|
127
|
+
var _this = this;
|
|
128
|
+
return tslib_1.__generator(this, function (_d) {
|
|
129
|
+
switch (_d.label) {
|
|
130
|
+
case 0:
|
|
131
|
+
_d.trys.push([0, 11, , 12]);
|
|
132
|
+
cmd = this.createCommand();
|
|
133
|
+
return [4 /*yield*/, (0, filter_consumer_bridge_to_sql_request_js_1.dbNamesOf)(entity, this.wrapIdentifier)];
|
|
134
|
+
case 1:
|
|
135
|
+
e = _d.sent();
|
|
136
|
+
return [4 /*yield*/, cmd.execute("PRAGMA table_info(".concat(e.$entityName, ")"))];
|
|
137
|
+
case 2:
|
|
138
|
+
cols = (_d.sent()).rows.map(function (x) { return _this.wrapIdentifier(x.name.toLocaleLowerCase()); });
|
|
139
|
+
_d.label = 3;
|
|
140
|
+
case 3:
|
|
141
|
+
_d.trys.push([3, 8, 9, 10]);
|
|
142
|
+
_a = tslib_1.__values(entity.fields), _b = _a.next();
|
|
143
|
+
_d.label = 4;
|
|
144
|
+
case 4:
|
|
145
|
+
if (!!_b.done) return [3 /*break*/, 7];
|
|
146
|
+
col = _b.value;
|
|
147
|
+
if (!!(0, filter_consumer_bridge_to_sql_request_js_1.shouldNotCreateField)(col, e)) return [3 /*break*/, 6];
|
|
148
|
+
colName = e.$dbNameOf(col).toLocaleLowerCase();
|
|
149
|
+
if (!!cols.includes(colName)) return [3 /*break*/, 6];
|
|
150
|
+
sql = "ALTER table ".concat(e.$entityName, " ") +
|
|
151
|
+
"add column ".concat(this.addColumnSqlSyntax(col, e.$dbNameOf(col), true));
|
|
152
|
+
return [4 /*yield*/, this.createCommand().execute(sql)];
|
|
153
|
+
case 5:
|
|
154
|
+
_d.sent();
|
|
155
|
+
_d.label = 6;
|
|
156
|
+
case 6:
|
|
157
|
+
_b = _a.next();
|
|
158
|
+
return [3 /*break*/, 4];
|
|
159
|
+
case 7: return [3 /*break*/, 10];
|
|
160
|
+
case 8:
|
|
161
|
+
e_2_1 = _d.sent();
|
|
162
|
+
e_2 = { error: e_2_1 };
|
|
163
|
+
return [3 /*break*/, 10];
|
|
164
|
+
case 9:
|
|
165
|
+
try {
|
|
166
|
+
if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
|
|
167
|
+
}
|
|
168
|
+
finally { if (e_2) throw e_2.error; }
|
|
169
|
+
return [7 /*endfinally*/];
|
|
170
|
+
case 10: return [3 /*break*/, 12];
|
|
171
|
+
case 11:
|
|
172
|
+
err_2 = _d.sent();
|
|
173
|
+
console.error(err_2);
|
|
174
|
+
return [3 /*break*/, 12];
|
|
175
|
+
case 12: return [2 /*return*/];
|
|
118
176
|
}
|
|
119
177
|
});
|
|
120
178
|
});
|
|
@@ -157,18 +215,40 @@ var SqliteCoreDataProvider = /** @class */ (function () {
|
|
|
157
215
|
};
|
|
158
216
|
SqliteCoreDataProvider.prototype.createTableIfNotExist = function (entity) {
|
|
159
217
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
160
|
-
var sql;
|
|
161
|
-
|
|
162
|
-
|
|
218
|
+
var sql, sql_1, sql_1_1, element, e_3_1;
|
|
219
|
+
var e_3, _a;
|
|
220
|
+
return tslib_1.__generator(this, function (_b) {
|
|
221
|
+
switch (_b.label) {
|
|
163
222
|
case 0: return [4 /*yield*/, this.getCreateTableSql(entity)];
|
|
164
223
|
case 1:
|
|
165
|
-
sql =
|
|
166
|
-
|
|
167
|
-
console.log(sql);
|
|
168
|
-
return [4 /*yield*/, this.createCommand().execute(sql)];
|
|
224
|
+
sql = _b.sent();
|
|
225
|
+
_b.label = 2;
|
|
169
226
|
case 2:
|
|
170
|
-
|
|
171
|
-
|
|
227
|
+
_b.trys.push([2, 7, 8, 9]);
|
|
228
|
+
sql_1 = tslib_1.__values(sql), sql_1_1 = sql_1.next();
|
|
229
|
+
_b.label = 3;
|
|
230
|
+
case 3:
|
|
231
|
+
if (!!sql_1_1.done) return [3 /*break*/, 6];
|
|
232
|
+
element = sql_1_1.value;
|
|
233
|
+
return [4 /*yield*/, this.createCommand().execute(element)];
|
|
234
|
+
case 4:
|
|
235
|
+
_b.sent();
|
|
236
|
+
_b.label = 5;
|
|
237
|
+
case 5:
|
|
238
|
+
sql_1_1 = sql_1.next();
|
|
239
|
+
return [3 /*break*/, 3];
|
|
240
|
+
case 6: return [3 /*break*/, 9];
|
|
241
|
+
case 7:
|
|
242
|
+
e_3_1 = _b.sent();
|
|
243
|
+
e_3 = { error: e_3_1 };
|
|
244
|
+
return [3 /*break*/, 9];
|
|
245
|
+
case 8:
|
|
246
|
+
try {
|
|
247
|
+
if (sql_1_1 && !sql_1_1.done && (_a = sql_1.return)) _a.call(sql_1);
|
|
248
|
+
}
|
|
249
|
+
finally { if (e_3) throw e_3.error; }
|
|
250
|
+
return [7 /*endfinally*/];
|
|
251
|
+
case 9: return [2 /*return*/];
|
|
172
252
|
}
|
|
173
253
|
});
|
|
174
254
|
});
|
|
@@ -176,7 +256,7 @@ var SqliteCoreDataProvider = /** @class */ (function () {
|
|
|
176
256
|
SqliteCoreDataProvider.prototype.getCreateTableSql = function (entity) {
|
|
177
257
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
178
258
|
var result, e, _a, _b, x, sql;
|
|
179
|
-
var
|
|
259
|
+
var e_4, _c;
|
|
180
260
|
return tslib_1.__generator(this, function (_d) {
|
|
181
261
|
switch (_d.label) {
|
|
182
262
|
case 0:
|
|
@@ -205,14 +285,21 @@ var SqliteCoreDataProvider = /** @class */ (function () {
|
|
|
205
285
|
}
|
|
206
286
|
}
|
|
207
287
|
}
|
|
208
|
-
catch (
|
|
288
|
+
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
209
289
|
finally {
|
|
210
290
|
try {
|
|
211
291
|
if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
|
|
212
292
|
}
|
|
213
|
-
finally { if (
|
|
293
|
+
finally { if (e_4) throw e_4.error; }
|
|
294
|
+
}
|
|
295
|
+
sql = [
|
|
296
|
+
'create table if not exists ' + e.$entityName + ' (' + result + '\r\n)',
|
|
297
|
+
];
|
|
298
|
+
if (entity.idMetadata.fields.length > 1) {
|
|
299
|
+
sql.push("create unique index ".concat(this.wrapIdentifier(entity.dbName + '_primary_key'), " on ").concat(e.$entityName, " (").concat(entity.idMetadata.fields
|
|
300
|
+
.map(function (x) { return e.$dbNameOf(x); })
|
|
301
|
+
.join(','), ")"));
|
|
214
302
|
}
|
|
215
|
-
sql = 'create table if not exists ' + e.$entityName + ' (' + result + '\r\n)';
|
|
216
303
|
return [2 /*return*/, sql];
|
|
217
304
|
}
|
|
218
305
|
});
|