remult 3.3.18 → 3.3.19-next.2

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 (38) hide show
  1. package/esm/index.js +7 -6
  2. package/esm/remult-d1.js +1 -0
  3. package/esm/remult-knex/index.js +112 -2
  4. package/esm/remult-mongo.js +17 -8
  5. package/esm/remult-sqlite-core.js +1 -0
  6. package/esm/src/data-interfaces.js +4 -4
  7. package/esm/src/data-providers/array-entity-data-provider.js +14 -2
  8. package/esm/src/data-providers/indexed-db-data-provider.js +811 -0
  9. package/esm/src/data-providers/json-data-provider.js +2 -2
  10. package/esm/src/data-providers/rest-data-provider.js +11 -12
  11. package/esm/src/data-providers/sql-database.js +110 -43
  12. package/esm/src/remult3/RepositoryImplementation.js +90 -60
  13. package/index.d.ts +31 -17
  14. package/index.js +5 -2
  15. package/package.json +1 -1
  16. package/remult-d1.d.ts +1 -0
  17. package/remult-d1.js +1 -0
  18. package/remult-knex/index.d.ts +2 -2
  19. package/remult-knex/index.js +329 -44
  20. package/remult-mongo.js +80 -36
  21. package/remult-sqlite-core.d.ts +1 -0
  22. package/remult-sqlite-core.js +1 -0
  23. package/src/column-interfaces.d.ts +4 -0
  24. package/src/data-interfaces.d.ts +2 -3
  25. package/src/data-interfaces.js +4 -4
  26. package/src/data-providers/array-entity-data-provider.d.ts +2 -2
  27. package/src/data-providers/array-entity-data-provider.js +92 -14
  28. package/src/data-providers/indexed-db-data-provider.d.ts +39 -0
  29. package/src/data-providers/indexed-db-data-provider.js +1387 -0
  30. package/src/data-providers/json-data-provider.js +2 -2
  31. package/src/data-providers/rest-data-provider.d.ts +2 -3
  32. package/src/data-providers/rest-data-provider.js +18 -17
  33. package/src/data-providers/sql-database.js +254 -105
  34. package/src/remult3/RepositoryImplementation.d.ts +1 -1
  35. package/src/remult3/RepositoryImplementation.js +384 -270
  36. package/src/remult3/remult3.d.ts +2 -2
  37. package/src/sql-command.d.ts +2 -0
  38. package/src/standard-schema/index.d.ts +1 -1
package/remult-mongo.js CHANGED
@@ -521,23 +521,27 @@ var MongoEntityDataProvider = /** @class */ (function () {
521
521
  });
522
522
  });
523
523
  };
524
- MongoEntityDataProvider.prototype.delete = function (id) {
524
+ MongoEntityDataProvider.prototype.delete = function (ids) {
525
525
  return tslib_1.__awaiter(this, void 0, void 0, function () {
526
526
  var _a, e, collection, f, _b, _c;
527
- return tslib_1.__generator(this, function (_d) {
528
- switch (_d.label) {
529
- case 0: return [4 /*yield*/, this.collection()];
527
+ var _d;
528
+ return tslib_1.__generator(this, function (_e) {
529
+ switch (_e.label) {
530
+ case 0:
531
+ if (ids.length === 0)
532
+ return [2 /*return*/];
533
+ return [4 /*yield*/, this.collection()];
530
534
  case 1:
531
- _a = _d.sent(), e = _a.e, collection = _a.collection;
535
+ _a = _e.sent(), e = _a.e, collection = _a.collection;
532
536
  f = new FilterConsumerBridgeToMongo(e);
533
- index_js_1.Filter.fromEntityFilter(this.entity, this.entity.idMetadata.getIdFilter(id)).__applyToConsumer(f);
534
- _c = (_b = collection).deleteOne;
537
+ index_js_1.Filter.fromEntityFilter(this.entity, (_d = this.entity.idMetadata).getIdFilter.apply(_d, tslib_1.__spreadArray([], tslib_1.__read(ids), false))).__applyToConsumer(f);
538
+ _c = (_b = collection).deleteMany;
535
539
  return [4 /*yield*/, f.resolveWhere()];
536
- case 2: return [4 /*yield*/, _c.apply(_b, [_d.sent(), {
540
+ case 2: return [4 /*yield*/, _c.apply(_b, [_e.sent(), {
537
541
  session: this.session,
538
542
  }])];
539
543
  case 3:
540
- _d.sent();
544
+ _e.sent();
541
545
  return [2 /*return*/];
542
546
  }
543
547
  });
@@ -545,25 +549,65 @@ var MongoEntityDataProvider = /** @class */ (function () {
545
549
  };
546
550
  MongoEntityDataProvider.prototype.insert = function (data, options) {
547
551
  return tslib_1.__awaiter(this, void 0, void 0, function () {
548
- var _a, collection, e, r, _b, _c, _d;
549
- return tslib_1.__generator(this, function (_e) {
550
- switch (_e.label) {
551
- case 0: return [4 /*yield*/, this.collection()];
552
+ var _a, collection, e, docs, data_1, data_1_1, row, _b, _c, e_12_1, r, result, i, _d, _e, _f;
553
+ var e_12, _g;
554
+ return tslib_1.__generator(this, function (_h) {
555
+ switch (_h.label) {
556
+ case 0:
557
+ if (data.length === 0)
558
+ return [2 /*return*/, []];
559
+ return [4 /*yield*/, this.collection()];
552
560
  case 1:
553
- _a = _e.sent(), collection = _a.collection, e = _a.e;
554
- _c = (_b = collection).insertOne;
555
- return [4 /*yield*/, this.translateToDb(data, e)];
556
- case 2: return [4 /*yield*/, _c.apply(_b, [_e.sent(), {
557
- session: this.session,
558
- }])];
561
+ _a = _h.sent(), collection = _a.collection, e = _a.e;
562
+ docs = [];
563
+ _h.label = 2;
564
+ case 2:
565
+ _h.trys.push([2, 7, 8, 9]);
566
+ data_1 = tslib_1.__values(data), data_1_1 = data_1.next();
567
+ _h.label = 3;
559
568
  case 3:
560
- r = _e.sent();
569
+ if (!!data_1_1.done) return [3 /*break*/, 6];
570
+ row = data_1_1.value;
571
+ _c = (_b = docs).push;
572
+ return [4 /*yield*/, this.translateToDb(row, e)];
573
+ case 4:
574
+ _c.apply(_b, [_h.sent()]);
575
+ _h.label = 5;
576
+ case 5:
577
+ data_1_1 = data_1.next();
578
+ return [3 /*break*/, 3];
579
+ case 6: return [3 /*break*/, 9];
580
+ case 7:
581
+ e_12_1 = _h.sent();
582
+ e_12 = { error: e_12_1 };
583
+ return [3 /*break*/, 9];
584
+ case 8:
585
+ try {
586
+ if (data_1_1 && !data_1_1.done && (_g = data_1.return)) _g.call(data_1);
587
+ }
588
+ finally { if (e_12) throw e_12.error; }
589
+ return [7 /*endfinally*/];
590
+ case 9: return [4 /*yield*/, collection.insertMany(docs, { session: this.session })];
591
+ case 10:
592
+ r = _h.sent();
561
593
  if ((options === null || options === void 0 ? void 0 : options.select) === 'none')
562
- return [2 /*return*/, undefined];
563
- _d = this.translateFromDb;
564
- return [4 /*yield*/, collection.findOne({ _id: r.insertedId }, { session: this.session })];
565
- case 4: return [4 /*yield*/, _d.apply(this, [_e.sent(), e])];
566
- case 5: return [2 /*return*/, _e.sent()];
594
+ return [2 /*return*/, data.map(function () { return undefined; })];
595
+ result = [];
596
+ i = 0;
597
+ _h.label = 11;
598
+ case 11:
599
+ if (!(i < data.length)) return [3 /*break*/, 15];
600
+ _e = (_d = result).push;
601
+ _f = this.translateFromDb;
602
+ return [4 /*yield*/, collection.findOne({ _id: r.insertedIds[i] }, { session: this.session })];
603
+ case 12: return [4 /*yield*/, _f.apply(this, [_h.sent(), e])];
604
+ case 13:
605
+ _e.apply(_d, [_h.sent()]);
606
+ _h.label = 14;
607
+ case 14:
608
+ i++;
609
+ return [3 /*break*/, 11];
610
+ case 15: return [2 /*return*/, result];
567
611
  }
568
612
  });
569
613
  });
@@ -593,8 +637,8 @@ var FilterConsumerBridgeToMongo = /** @class */ (function () {
593
637
  }
594
638
  FilterConsumerBridgeToMongo.prototype.resolveWhere = function () {
595
639
  return tslib_1.__awaiter(this, void 0, void 0, function () {
596
- var p, p_1, p_1_1, pr, e_12_1;
597
- var e_12, _a;
640
+ var p, p_1, p_1_1, pr, e_13_1;
641
+ var e_13, _a;
598
642
  return tslib_1.__generator(this, function (_b) {
599
643
  switch (_b.label) {
600
644
  case 0:
@@ -604,7 +648,7 @@ var FilterConsumerBridgeToMongo = /** @class */ (function () {
604
648
  _b.label = 1;
605
649
  case 1:
606
650
  _b.trys.push([1, 6, 7, 8]);
607
- p_1 = (e_12 = void 0, tslib_1.__values(p)), p_1_1 = p_1.next();
651
+ p_1 = (e_13 = void 0, tslib_1.__values(p)), p_1_1 = p_1.next();
608
652
  _b.label = 2;
609
653
  case 2:
610
654
  if (!!p_1_1.done) return [3 /*break*/, 5];
@@ -618,14 +662,14 @@ var FilterConsumerBridgeToMongo = /** @class */ (function () {
618
662
  return [3 /*break*/, 2];
619
663
  case 5: return [3 /*break*/, 8];
620
664
  case 6:
621
- e_12_1 = _b.sent();
622
- e_12 = { error: e_12_1 };
665
+ e_13_1 = _b.sent();
666
+ e_13 = { error: e_13_1 };
623
667
  return [3 /*break*/, 8];
624
668
  case 7:
625
669
  try {
626
670
  if (p_1_1 && !p_1_1.done && (_a = p_1.return)) _a.call(p_1);
627
671
  }
628
- finally { if (e_12) throw e_12.error; }
672
+ finally { if (e_13) throw e_13.error; }
629
673
  return [7 /*endfinally*/];
630
674
  case 8: return [3 /*break*/, 0];
631
675
  case 9:
@@ -644,8 +688,8 @@ var FilterConsumerBridgeToMongo = /** @class */ (function () {
644
688
  FilterConsumerBridgeToMongo.prototype.or = function (orElements) {
645
689
  var _this = this;
646
690
  this.promises.push((function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
647
- var result, orElements_1, orElements_1_1, element, f, where, e_13_1;
648
- var e_13, _a;
691
+ var result, orElements_1, orElements_1_1, element, f, where, e_14_1;
692
+ var e_14, _a;
649
693
  var _b;
650
694
  return tslib_1.__generator(this, function (_c) {
651
695
  switch (_c.label) {
@@ -676,14 +720,14 @@ var FilterConsumerBridgeToMongo = /** @class */ (function () {
676
720
  return [3 /*break*/, 2];
677
721
  case 5: return [3 /*break*/, 8];
678
722
  case 6:
679
- e_13_1 = _c.sent();
680
- e_13 = { error: e_13_1 };
723
+ e_14_1 = _c.sent();
724
+ e_14 = { error: e_14_1 };
681
725
  return [3 /*break*/, 8];
682
726
  case 7:
683
727
  try {
684
728
  if (orElements_1_1 && !orElements_1_1.done && (_a = orElements_1.return)) _a.call(orElements_1);
685
729
  }
686
- finally { if (e_13) throw e_13.error; }
730
+ finally { if (e_14) throw e_14.error; }
687
731
  return [7 /*endfinally*/];
688
732
  case 8:
689
733
  this.result.push(function () { return ({
@@ -9,6 +9,7 @@ export declare class SqliteCoreDataProvider implements SqlImplementation, CanBui
9
9
  doesNotSupportReturningSyntaxOnlyForUpdate: boolean;
10
10
  constructor(createCommand: () => SqlCommand, end: () => Promise<void>, doesNotSupportReturningSyntax?: boolean, doesNotSupportReturningSyntaxOnlyForUpdate?: boolean);
11
11
  orderByNullsFirst?: boolean;
12
+ maxParametersInOneSqlStatement: number;
12
13
  getLimitSqlSyntax(limit: number, offset: number): string;
13
14
  afterMutation?: VoidFunction;
14
15
  provideMigrationBuilder(builder: MigrationCode): MigrationBuilder;
@@ -13,6 +13,7 @@ var SqliteCoreDataProvider = /** @class */ (function () {
13
13
  this.end = end;
14
14
  this.doesNotSupportReturningSyntax = doesNotSupportReturningSyntax;
15
15
  this.doesNotSupportReturningSyntaxOnlyForUpdate = doesNotSupportReturningSyntaxOnlyForUpdate;
16
+ this.maxParametersInOneSqlStatement = 999;
16
17
  }
17
18
  SqliteCoreDataProvider.prototype.getLimitSqlSyntax = function (limit, offset) {
18
19
  return ' limit ' + limit + ' offset ' + offset;
@@ -276,6 +276,7 @@ export interface ValueConverter<valueType> {
276
276
  toJson?(val: valueType): any;
277
277
  /**
278
278
  * Converts a value from the database format to the valueType.
279
+ * Defaults to `fromJson` when not provided.
279
280
  *
280
281
  * @param val The value to convert.
281
282
  * @returns The converted value.
@@ -286,6 +287,7 @@ export interface ValueConverter<valueType> {
286
287
  fromDb?(val: any): valueType;
287
288
  /**
288
289
  * Converts a value of valueType to the database format.
290
+ * Defaults to `toJson` when not provided.
289
291
  *
290
292
  * @param val The value to convert.
291
293
  * @returns The converted value.
@@ -297,6 +299,7 @@ export interface ValueConverter<valueType> {
297
299
  toDbSql?(val: string): string;
298
300
  /**
299
301
  * Converts a value of valueType to a string suitable for an HTML input element.
302
+ * Defaults to `toJson` when not provided.
300
303
  *
301
304
  * @param val The value to convert.
302
305
  * @param inputType The type of the input element (optional).
@@ -308,6 +311,7 @@ export interface ValueConverter<valueType> {
308
311
  toInput?(val: valueType, inputType?: string): string;
309
312
  /**
310
313
  * Converts a string from an HTML input element to the valueType.
314
+ * Defaults to `fromJson` when not provided.
311
315
  *
312
316
  * @param val The value to convert.
313
317
  * @param inputType The type of the input element (optional).
@@ -29,11 +29,10 @@ export interface EntityDataProvider {
29
29
  find(options?: EntityDataProviderFindOptions): Promise<Array<any>>;
30
30
  groupBy(options?: EntityDataProviderGroupByOptions): Promise<any[]>;
31
31
  update(id: any, data: any, options?: InsertOrUpdateOptions): Promise<any>;
32
- delete(id: any): Promise<void>;
33
- insert(data: any, options?: InsertOrUpdateOptions): Promise<any>;
32
+ delete(ids: any[]): Promise<void>;
33
+ insert(data: any[], options?: InsertOrUpdateOptions): Promise<any[]>;
34
34
  }
35
35
  export interface ProxyEntityDataProvider {
36
- insertMany(data: any[], options?: InsertOrUpdateOptions): Promise<any[]>;
37
36
  deleteMany(where: Filter | 'all'): Promise<number>;
38
37
  updateMany(where: Filter | 'all', data: any): Promise<number>;
39
38
  query(options: EntityDataProviderFindOptions, aggregateOptions: EntityDataProviderGroupByOptions): Promise<{
@@ -44,11 +44,11 @@ var EntityDataProviderPromiseWrapper = /** @class */ (function () {
44
44
  function EntityDataProviderPromiseWrapper(dataProvider) {
45
45
  this.dataProvider = dataProvider;
46
46
  }
47
- EntityDataProviderPromiseWrapper.prototype.delete = function (id) {
48
- return this.dataProvider.then(function (dp) { return dp.delete(id); });
47
+ EntityDataProviderPromiseWrapper.prototype.delete = function (ids) {
48
+ return this.dataProvider.then(function (dp) { return dp.delete(ids); });
49
49
  };
50
- EntityDataProviderPromiseWrapper.prototype.insert = function (data) {
51
- return this.dataProvider.then(function (dp) { return dp.insert(data); });
50
+ EntityDataProviderPromiseWrapper.prototype.insert = function (data, options) {
51
+ return this.dataProvider.then(function (dp) { return dp.insert(data, options); });
52
52
  };
53
53
  EntityDataProviderPromiseWrapper.prototype.count = function (where) {
54
54
  return this.dataProvider.then(function (dp) { return dp.count(where); });
@@ -10,8 +10,8 @@ export declare class ArrayEntityDataProvider implements EntityDataProvider {
10
10
  count(where?: Filter): Promise<number>;
11
11
  find(options?: EntityDataProviderFindOptions): Promise<any[]>;
12
12
  update(id: any, data: any): Promise<any>;
13
- delete(id: any): Promise<void>;
14
- insert(data: any): Promise<any>;
13
+ delete(ids: any[]): Promise<void>;
14
+ insert(data: any[]): Promise<any[]>;
15
15
  }
16
16
  export type CustomArrayFilter = (item: any) => boolean;
17
17
  export interface CustomArrayFilterObject {
@@ -539,7 +539,44 @@ var ArrayEntityDataProvider = /** @class */ (function () {
539
539
  });
540
540
  });
541
541
  };
542
- ArrayEntityDataProvider.prototype.delete = function (id) {
542
+ ArrayEntityDataProvider.prototype.delete = function (ids) {
543
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
544
+ var ids_1, ids_1_1, id, e_16_1;
545
+ var e_16, _a;
546
+ return tslib_1.__generator(this, function (_b) {
547
+ switch (_b.label) {
548
+ case 0:
549
+ _b.trys.push([0, 5, 6, 7]);
550
+ ids_1 = tslib_1.__values(ids), ids_1_1 = ids_1.next();
551
+ _b.label = 1;
552
+ case 1:
553
+ if (!!ids_1_1.done) return [3 /*break*/, 4];
554
+ id = ids_1_1.value;
555
+ return [4 /*yield*/, this.deleteOne(id)];
556
+ case 2:
557
+ _b.sent();
558
+ _b.label = 3;
559
+ case 3:
560
+ ids_1_1 = ids_1.next();
561
+ return [3 /*break*/, 1];
562
+ case 4: return [3 /*break*/, 7];
563
+ case 5:
564
+ e_16_1 = _b.sent();
565
+ e_16 = { error: e_16_1 };
566
+ return [3 /*break*/, 7];
567
+ case 6:
568
+ try {
569
+ if (ids_1_1 && !ids_1_1.done && (_a = ids_1.return)) _a.call(ids_1);
570
+ }
571
+ finally { if (e_16) throw e_16.error; }
572
+ return [7 /*endfinally*/];
573
+ case 7: return [2 /*return*/];
574
+ }
575
+ });
576
+ });
577
+ };
578
+ //@internal
579
+ ArrayEntityDataProvider.prototype.deleteOne = function (id) {
543
580
  return tslib_1.__awaiter(this, void 0, void 0, function () {
544
581
  var names, idMatches, i;
545
582
  return tslib_1.__generator(this, function (_a) {
@@ -551,7 +588,7 @@ var ArrayEntityDataProvider = /** @class */ (function () {
551
588
  for (i = 0; i < this.rows().length; i++) {
552
589
  if (idMatches(this.rows()[i])) {
553
590
  this.rows().splice(i, 1);
554
- return [2 /*return*/, Promise.resolve()];
591
+ return [2 /*return*/];
555
592
  }
556
593
  }
557
594
  throw new Error("ArrayEntityDataProvider: Couldn't find row with id \"".concat(id, "\" in entity \"").concat(this.entity.key, "\" to delete"));
@@ -560,9 +597,50 @@ var ArrayEntityDataProvider = /** @class */ (function () {
560
597
  });
561
598
  };
562
599
  ArrayEntityDataProvider.prototype.insert = function (data) {
600
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
601
+ var result, data_1, data_1_1, row, _a, _b, e_17_1;
602
+ var e_17, _c;
603
+ return tslib_1.__generator(this, function (_d) {
604
+ switch (_d.label) {
605
+ case 0:
606
+ result = [];
607
+ _d.label = 1;
608
+ case 1:
609
+ _d.trys.push([1, 6, 7, 8]);
610
+ data_1 = tslib_1.__values(data), data_1_1 = data_1.next();
611
+ _d.label = 2;
612
+ case 2:
613
+ if (!!data_1_1.done) return [3 /*break*/, 5];
614
+ row = data_1_1.value;
615
+ _b = (_a = result).push;
616
+ return [4 /*yield*/, this.insertOne(row)];
617
+ case 3:
618
+ _b.apply(_a, [_d.sent()]);
619
+ _d.label = 4;
620
+ case 4:
621
+ data_1_1 = data_1.next();
622
+ return [3 /*break*/, 2];
623
+ case 5: return [3 /*break*/, 8];
624
+ case 6:
625
+ e_17_1 = _d.sent();
626
+ e_17 = { error: e_17_1 };
627
+ return [3 /*break*/, 8];
628
+ case 7:
629
+ try {
630
+ if (data_1_1 && !data_1_1.done && (_c = data_1.return)) _c.call(data_1);
631
+ }
632
+ finally { if (e_17) throw e_17.error; }
633
+ return [7 /*endfinally*/];
634
+ case 8: return [2 /*return*/, result];
635
+ }
636
+ });
637
+ });
638
+ };
639
+ //@internal
640
+ ArrayEntityDataProvider.prototype.insertOne = function (data) {
563
641
  return tslib_1.__awaiter(this, void 0, void 0, function () {
564
642
  var names, j, idf, idDbName, _a, _b, row;
565
- var e_16, _c;
643
+ var e_18, _c;
566
644
  var _this = this;
567
645
  return tslib_1.__generator(this, function (_d) {
568
646
  switch (_d.label) {
@@ -582,17 +660,17 @@ var ArrayEntityDataProvider = /** @class */ (function () {
582
660
  j[idDbName] = row[idDbName] + 1;
583
661
  }
584
662
  }
585
- catch (e_16_1) { e_16 = { error: e_16_1 }; }
663
+ catch (e_18_1) { e_18 = { error: e_18_1 }; }
586
664
  finally {
587
665
  try {
588
666
  if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
589
667
  }
590
- finally { if (e_16) throw e_16.error; }
668
+ finally { if (e_18) throw e_18.error; }
591
669
  }
592
670
  }
593
671
  else {
594
672
  if (this.rows().find(function (x) {
595
- var e_17, _a;
673
+ var e_19, _a;
596
674
  try {
597
675
  for (var _b = tslib_1.__values(_this.entity.idMetadata.fields), _c = _b.next(); !_c.done; _c = _b.next()) {
598
676
  var f = _c.value;
@@ -600,12 +678,12 @@ var ArrayEntityDataProvider = /** @class */ (function () {
600
678
  return false;
601
679
  }
602
680
  }
603
- catch (e_17_1) { e_17 = { error: e_17_1 }; }
681
+ catch (e_19_1) { e_19 = { error: e_19_1 }; }
604
682
  finally {
605
683
  try {
606
684
  if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
607
685
  }
608
- finally { if (e_17) throw e_17.error; }
686
+ finally { if (e_19) throw e_19.error; }
609
687
  }
610
688
  return true;
611
689
  })) {
@@ -656,7 +734,7 @@ var FilterConsumerBridgeToObject = /** @class */ (function () {
656
734
  throw new Error('Custom Filter should be translated before it gets here');
657
735
  };
658
736
  FilterConsumerBridgeToObject.prototype.or = function (orElements) {
659
- var e_18, _a;
737
+ var e_20, _a;
660
738
  try {
661
739
  for (var orElements_1 = tslib_1.__values(orElements), orElements_1_1 = orElements_1.next(); !orElements_1_1.done; orElements_1_1 = orElements_1.next()) {
662
740
  var element = orElements_1_1.value;
@@ -667,12 +745,12 @@ var FilterConsumerBridgeToObject = /** @class */ (function () {
667
745
  }
668
746
  }
669
747
  }
670
- catch (e_18_1) { e_18 = { error: e_18_1 }; }
748
+ catch (e_20_1) { e_20 = { error: e_20_1 }; }
671
749
  finally {
672
750
  try {
673
751
  if (orElements_1_1 && !orElements_1_1.done && (_a = orElements_1.return)) _a.call(orElements_1);
674
752
  }
675
- finally { if (e_18) throw e_18.error; }
753
+ finally { if (e_20) throw e_20.error; }
676
754
  }
677
755
  this.ok = false;
678
756
  };
@@ -691,7 +769,7 @@ var FilterConsumerBridgeToObject = /** @class */ (function () {
691
769
  this.ok = false;
692
770
  };
693
771
  FilterConsumerBridgeToObject.prototype.isIn = function (col, val) {
694
- var e_19, _a;
772
+ var e_21, _a;
695
773
  try {
696
774
  for (var val_1 = tslib_1.__values(val), val_1_1 = val_1.next(); !val_1_1.done; val_1_1 = val_1.next()) {
697
775
  var v = val_1_1.value;
@@ -700,12 +778,12 @@ var FilterConsumerBridgeToObject = /** @class */ (function () {
700
778
  }
701
779
  }
702
780
  }
703
- catch (e_19_1) { e_19 = { error: e_19_1 }; }
781
+ catch (e_21_1) { e_21 = { error: e_21_1 }; }
704
782
  finally {
705
783
  try {
706
784
  if (val_1_1 && !val_1_1.done && (_a = val_1.return)) _a.call(val_1);
707
785
  }
708
- finally { if (e_19) throw e_19.error; }
786
+ finally { if (e_21) throw e_21.error; }
709
787
  }
710
788
  this.ok = false;
711
789
  };
@@ -0,0 +1,39 @@
1
+ import type { DataProvider, EntityDataProvider } from '../data-interfaces.js';
2
+ import type { ClassType } from '../../classType.js';
3
+ import type { EntityMetadata, MembersOnly } from '../remult3/remult3.js';
4
+ export type IndexedDbIndexDef<entityType> = keyof MembersOnly<entityType> | readonly (keyof MembersOnly<entityType>)[];
5
+ export declare class IndexedDbIndexBuilder {
6
+ ensureIndexes<entityType>(entity: ClassType<entityType>, indexes: readonly IndexedDbIndexDef<entityType>[]): this;
7
+ }
8
+ export type IndexedDbDataProviderOptions = {
9
+ indexes?: (x: IndexedDbIndexBuilder) => void;
10
+ encrypt?: boolean;
11
+ getEncryptionKey?: () => CryptoKey | Promise<CryptoKey>;
12
+ };
13
+ export declare class IndexedDbDataProvider implements DataProvider {
14
+ private dbName;
15
+ constructor(dbName?: string, options?: IndexedDbDataProviderOptions);
16
+ getEntityDataProvider(entity: EntityMetadata): EntityDataProvider;
17
+ transaction(action: (dataProvider: DataProvider) => Promise<void>): Promise<void>;
18
+ ensureSchema(entities: EntityMetadata[]): Promise<void>;
19
+ close(): void;
20
+ }
21
+ export type IdbFetchOp = {
22
+ type: 'keys';
23
+ keys: IDBValidKey[];
24
+ index?: string;
25
+ } | {
26
+ type: 'range';
27
+ range: IDBKeyRange;
28
+ index?: string;
29
+ };
30
+ export type IdbPrefetch = {
31
+ type: 'all';
32
+ } | IdbFetchOp | {
33
+ type: 'or';
34
+ parts: IdbFetchOp[];
35
+ };
36
+ export type IdbIndexInfo = {
37
+ name: string;
38
+ keyPath: string | string[];
39
+ };