dexie 4.0.7 → 4.0.8

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/dist/dexie.d.ts CHANGED
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * By David Fahlander, david.fahlander@gmail.com
6
6
  *
7
- * Version 4.0.7, Sun May 26 2024
7
+ * Version 4.0.8, Wed Jul 10 2024
8
8
  *
9
9
  * https://dexie.org
10
10
  *
@@ -360,19 +360,20 @@ export interface PromiseExtended<T = any> extends Promise<T> {
360
360
  timeout(ms: number, msg?: string): PromiseExtended<T>;
361
361
  }
362
362
  export type KeyPaths<T> = {
363
- [P in keyof T]: P extends string ? T[P] extends Array<infer K> ? K extends object // only drill into the array element if it's an object
363
+ [P in keyof T]: P extends string ? T[P] extends Array<infer K> ? K extends any[] // Array of arrays (issue #2026)
364
+ ? P | `${P}.${number}` | `${P}.${number}.${number}` : K extends object // only drill into the array element if it's an object
364
365
  ? P | `${P}.${number}` | `${P}.${number}.${KeyPaths<K>}` : P | `${P}.${number}` : T[P] extends (...args: any[]) => any // Method
365
366
  ? never : T[P] extends object ? P | `${P}.${KeyPaths<T[P]>}` : P : never;
366
367
  }[keyof T];
367
- export type KeyPathValue<T, PATH> = PATH extends `${infer R}.${infer S}` ? R extends keyof T ? KeyPathValue<T[R], S> : T extends any[] ? PATH extends `${number}.${infer S}` ? KeyPathValue<T[number], S> : void : void : PATH extends `${number}` ? T extends any[] ? T[number] : void : PATH extends keyof T ? T[PATH] : void;
368
+ export type KeyPathValue<T, PATH> = PATH extends `${infer R}.${infer S}` ? R extends keyof T ? KeyPathValue<T[R], S> : T extends any[] ? PATH extends `${number}.${infer S}` ? KeyPathValue<T[number], S> : void : void : PATH extends `${number}` ? T extends any[] ? T[number] : void : PATH extends keyof T ? T[PATH] : any;
368
369
  export declare const PropModSymbol: unique symbol;
369
370
  export type PropModSpec = {
370
371
  replacePrefix?: [
371
372
  string,
372
373
  string
373
374
  ];
374
- add?: number | BigInt | Array<string | number>;
375
- remove?: number | BigInt | Array<string | number>;
375
+ add?: number | bigint | Array<string | number>;
376
+ remove?: number | bigint | Array<string | number>;
376
377
  };
377
378
  export class PropModification implements PropModSpec {
378
379
  [PropModSymbol]?: true;
@@ -380,8 +381,8 @@ export class PropModification implements PropModSpec {
380
381
  string,
381
382
  string
382
383
  ];
383
- add?: number | BigInt | Array<string | number>;
384
- remove?: number | BigInt | Array<string | number>;
384
+ add?: number | bigint | Array<string | number>;
385
+ remove?: number | bigint | Array<string | number>;
385
386
  execute<T>(value: T): T;
386
387
  constructor(spec: PropModSpec);
387
388
  }
@@ -444,8 +445,8 @@ export type IntervalTree = IntervalTreeNode | EmptyRange;
444
445
  export interface IntervalTreeNode {
445
446
  from: IndexableType; // lower bound
446
447
  to: IndexableType; // upper bound
447
- l: IntervalTreeNode | null; // left
448
- r: IntervalTreeNode | null; // right
448
+ l?: IntervalTreeNode | null; // left
449
+ r?: IntervalTreeNode | null; // right
449
450
  d: number; // depth
450
451
  }
451
452
  export interface EmptyRange {
@@ -737,10 +738,11 @@ export interface Table<T = any, TKey = any, TInsertType = T> {
737
738
  reverse(): Collection<T, TKey, TInsertType>;
738
739
  mapToClass(constructor: Function): Function;
739
740
  add(item: TInsertType, key?: TKey): PromiseExtended<TKey>;
740
- update(key: TKey | T, changes: UpdateSpec<TInsertType> | ((obj: T, ctx: {
741
+ update(key: TKey | T, changes: ((obj: T, ctx: {
741
742
  value: any;
742
743
  primKey: IndexableType;
743
744
  }) => void | boolean)): PromiseExtended<number>;
745
+ update(key: TKey | T, changes: UpdateSpec<TInsertType>): PromiseExtended<number>;
744
746
  put(item: TInsertType, key?: TKey): PromiseExtended<TKey>;
745
747
  delete(key: TKey): PromiseExtended<void>;
746
748
  clear(): PromiseExtended<void>;
package/dist/dexie.js CHANGED
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * By David Fahlander, david.fahlander@gmail.com
6
6
  *
7
- * Version 4.0.7, Sun May 26 2024
7
+ * Version 4.0.8, Wed Jul 10 2024
8
8
  *
9
9
  * https://dexie.org
10
10
  *
@@ -1150,7 +1150,7 @@
1150
1150
  }
1151
1151
  }
1152
1152
 
1153
- var DEXIE_VERSION = '4.0.7';
1153
+ var DEXIE_VERSION = '4.0.8';
1154
1154
  var maxString = String.fromCharCode(65535);
1155
1155
  var minKey = -Infinity;
1156
1156
  var INVALID_KEY_ARGUMENT = "Invalid key provided. Keys must be of type string, number, Date or Array<string | number | Date>.";
@@ -3799,6 +3799,10 @@
3799
3799
  var _this = this;
3800
3800
  keys.forEach(function (key) { return addRange(_this, key, key); });
3801
3801
  return this;
3802
+ },
3803
+ hasKey: function (key) {
3804
+ var node = getRangeSetIterator(this).next(key).value;
3805
+ return node && cmp(node.from, key) <= 0 && cmp(node.to, key) >= 0;
3802
3806
  }
3803
3807
  },
3804
3808
  _a[iteratorSymbol] = function () {
@@ -4860,19 +4864,23 @@
4860
4864
  var extractLowLevelIndex = (index.lowLevelIndex || index).extractKey;
4861
4865
  var finalResult = ops.reduce(function (result, op) {
4862
4866
  var modifedResult = result;
4863
- var includedValues = op.type === 'add' || op.type === 'put'
4864
- ? op.values.filter(function (v) {
4865
- var key = extractIndex(v);
4866
- return multiEntry && isArray(key)
4867
+ var includedValues = [];
4868
+ if (op.type === 'add' || op.type === 'put') {
4869
+ var includedPKs = new RangeSet();
4870
+ for (var i = op.values.length - 1; i >= 0; --i) {
4871
+ var value = op.values[i];
4872
+ var pk = extractPrimKey(value);
4873
+ if (includedPKs.hasKey(pk))
4874
+ continue;
4875
+ var key = extractIndex(value);
4876
+ if (multiEntry && isArray(key)
4867
4877
  ? key.some(function (k) { return isWithinRange(k, queryRange); })
4868
- : isWithinRange(key, queryRange);
4869
- }).map(function (v) {
4870
- v = deepClone(v);
4871
- if (immutable)
4872
- Object.freeze(v);
4873
- return v;
4874
- })
4875
- : [];
4878
+ : isWithinRange(key, queryRange)) {
4879
+ includedPKs.addKey(pk);
4880
+ includedValues.push(value);
4881
+ }
4882
+ }
4883
+ }
4876
4884
  switch (op.type) {
4877
4885
  case 'add':
4878
4886
  modifedResult = result.concat(req.values
@@ -4882,20 +4890,16 @@
4882
4890
  case 'put':
4883
4891
  var keySet_1 = new RangeSet().addKeys(op.values.map(function (v) { return extractPrimKey(v); }));
4884
4892
  modifedResult = result
4885
- .filter(function (item) {
4886
- var key = req.values ? extractPrimKey(item) : item;
4887
- return !rangesOverlap(new RangeSet(key), keySet_1);
4888
- })
4889
- .concat(req.values
4893
+ .filter(
4894
+ function (item) { return !keySet_1.hasKey(req.values ? extractPrimKey(item) : item); })
4895
+ .concat(
4896
+ req.values
4890
4897
  ? includedValues
4891
4898
  : includedValues.map(function (v) { return extractPrimKey(v); }));
4892
4899
  break;
4893
4900
  case 'delete':
4894
4901
  var keysToDelete_1 = new RangeSet().addKeys(op.keys);
4895
- modifedResult = result.filter(function (item) {
4896
- var key = req.values ? extractPrimKey(item) : item;
4897
- return !rangesOverlap(new RangeSet(key), keysToDelete_1);
4898
- });
4902
+ modifedResult = result.filter(function (item) { return !keysToDelete_1.hasKey(req.values ? extractPrimKey(item) : item); });
4899
4903
  break;
4900
4904
  case 'deleteRange':
4901
4905
  var range_1 = op.range;