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.
Files changed (45) hide show
  1. package/esm/index.js +0 -1
  2. package/esm/live-query/data-provider-live-query-storage.js +0 -2
  3. package/esm/postgres/schema-builder.js +0 -41
  4. package/esm/remult-duckdb.js +7 -12
  5. package/esm/remult-knex/index.js +0 -7
  6. package/esm/remult-mongo.js +33 -0
  7. package/esm/remult-sqlite-core.js +33 -5
  8. package/esm/server/get-remult-admin-html.js +1 -1
  9. package/esm/server/remult-admin.js +2 -0
  10. package/esm/server/remult-api-server.js +4 -5
  11. package/esm/src/data-providers/array-entity-data-provider.js +26 -11
  12. package/esm/src/data-providers/in-memory-database.js +1 -1
  13. package/esm/src/data-providers/sql-database.js +2 -25
  14. package/esm/src/filter/filter-interfaces.js +1 -0
  15. package/esm/src/remult3/RepositoryImplementation.js +15 -4
  16. package/esm/src/remult3/remult3.js +0 -3
  17. package/index.d.ts +0 -1
  18. package/index.js +1 -3
  19. package/live-query/data-provider-live-query-storage.js +0 -2
  20. package/package.json +1 -1
  21. package/postgres/schema-builder.d.ts +0 -4
  22. package/postgres/schema-builder.js +15 -118
  23. package/remult-duckdb.d.ts +1 -1
  24. package/remult-duckdb.js +7 -12
  25. package/remult-knex/index.d.ts +0 -2
  26. package/remult-knex/index.js +0 -18
  27. package/remult-mongo.d.ts +2 -1
  28. package/remult-mongo.js +128 -37
  29. package/remult-sqlite-core.d.ts +2 -1
  30. package/remult-sqlite-core.js +116 -29
  31. package/server/get-remult-admin-html.js +1 -1
  32. package/server/remult-admin.d.ts +4 -0
  33. package/server/remult-admin.js +12 -10
  34. package/server/remult-api-server.js +14 -14
  35. package/src/data-providers/array-entity-data-provider.js +82 -37
  36. package/src/data-providers/in-memory-database.js +1 -1
  37. package/src/data-providers/sql-database.js +10 -69
  38. package/src/entity.d.ts +4 -4
  39. package/src/filter/filter-interfaces.js +1 -0
  40. package/src/remult3/RepositoryImplementation.js +15 -4
  41. package/src/remult3/remult3.d.ts +17 -2
  42. package/src/remult3/remult3.js +0 -3
  43. package/esm/src/data-providers/web-sql-data-provider.js +0 -140
  44. package/src/data-providers/web-sql-data-provider.d.ts +0 -20
  45. 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
- getEntityDataProvider(entity: EntityMetadata<any>): EntityDataProvider;
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 e_1, _a;
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 (e_1_1) { e_1 = { error: e_1_1 }; }
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 (e_1) throw e_1.error; }
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 e_2, _a;
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 (e_2_1) { e_2 = { error: e_2_1 }; }
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 (e_2) throw e_2.error; }
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 e_3, _f, e_4, _g, e_5, _h;
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 (e_3_1) { e_3 = { error: e_3_1 }; }
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 (e_3) throw e_3.error; }
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 e_6, _k;
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 = (e_6 = void 0, tslib_1.__values(options[operator])), _m = _l.next(); !_m.done; _m = _l.next()) {
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 (e_6_1) { e_6 = { error: e_6_1 }; }
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 (e_6) throw e_6.error; }
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 (e_4_1) { e_4 = { error: e_4_1 }; }
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 (e_4) throw e_4.error; }
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 (e_5_1) { e_5 = { error: e_5_1 }; }
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 (e_5) throw e_5.error; }
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 e_7, _a;
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 (e_7_1) { e_7 = { error: e_7_1 }; }
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 (e_7) throw e_7.error; }
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 e_8, _f;
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 (e_8_1) { e_8 = { error: e_8_1 }; }
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 (e_8) throw e_8.error; }
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 e_9, _f;
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 (e_9_1) { e_9 = { error: e_9_1 }; }
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 (e_9) throw e_9.error; }
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, e_10_1;
497
- var e_10, _a;
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 = (e_10 = void 0, tslib_1.__values(p)), p_1_1 = p_1.next();
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
- e_10_1 = _b.sent();
522
- e_10 = { error: e_10_1 };
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 (e_10) throw e_10.error; }
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, e_11_1;
548
- var e_11, _a;
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
- e_11_1 = _c.sent();
580
- e_11 = { error: e_11_1 };
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 (e_11) throw e_11.error; }
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 ({
@@ -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
  }
@@ -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
- var _a, _b;
26
- return tslib_1.__generator(this, function (_c) {
27
- switch (_c.label) {
28
- case 0:
29
- _b = (_a = builder).addSql;
30
- return [4 /*yield*/, self.getCreateTableSql(entity)];
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, 5, 6, 7]);
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*/, 4];
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
- _b.label = 3;
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 4: return [3 /*break*/, 7];
107
- case 5:
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*/, 7];
111
- case 6:
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 7: return [2 /*return*/];
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
- return tslib_1.__generator(this, function (_a) {
162
- switch (_a.label) {
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 = _a.sent();
166
- if (sql_database_js_1.SqlDatabase.LogToConsole)
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
- _a.sent();
171
- return [2 /*return*/];
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 e_2, _c;
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 (e_2_1) { e_2 = { error: e_2_1 }; }
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 (e_2) throw e_2.error; }
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
  });