dexie 4.0.1-alpha.8 → 4.0.1-beta.10
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/README.md +4 -1
- package/SECURITY.md +1 -1
- package/dist/dexie.d.ts +200 -137
- package/dist/dexie.js +1326 -802
- package/dist/dexie.js.map +1 -1
- package/dist/dexie.min.js +1 -1
- package/dist/dexie.min.js.map +1 -1
- package/dist/dexie.mjs +1326 -802
- package/dist/dexie.mjs.map +1 -1
- package/dist/modern/dexie.min.mjs +1 -1
- package/dist/modern/dexie.min.mjs.map +1 -1
- package/dist/modern/dexie.mjs +1280 -755
- package/dist/modern/dexie.mjs.map +1 -1
- package/import-wrapper-prod.d.mts +2 -0
- package/import-wrapper-prod.mjs +8 -3
- package/import-wrapper.d.mts +2 -0
- package/import-wrapper.mjs +8 -3
- package/package.json +12 -12
- package/pnpm-workspace.yaml +2 -0
- package/tsconfig.json +3 -0
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Dexie.js
|
|
2
2
|
========
|
|
3
3
|
|
|
4
|
-
[![NPM Version][npm-image]][npm-url]
|
|
4
|
+
[![NPM Version][npm-image]][npm-url] 
|
|
5
5
|
|
|
6
6
|
Dexie.js is a wrapper library for indexedDB - the standard database in the browser. https://dexie.org
|
|
7
7
|
|
|
@@ -250,6 +250,9 @@ Watch
|
|
|
250
250
|
pnpm run watch
|
|
251
251
|
```
|
|
252
252
|
|
|
253
|
+
<br/>
|
|
254
|
+
|
|
255
|
+
[](https://www.lambdatest.com/)
|
|
253
256
|
|
|
254
257
|
[npm-image]: https://img.shields.io/npm/v/dexie.svg?style=flat
|
|
255
258
|
[npm-url]: https://npmjs.org/package/dexie
|
package/SECURITY.md
CHANGED
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.1-
|
|
7
|
+
* Version 4.0.1-beta.10, Mon Feb 12 2024
|
|
8
8
|
*
|
|
9
9
|
* https://dexie.org
|
|
10
10
|
*
|
|
@@ -65,6 +65,7 @@ export interface Transaction {
|
|
|
65
65
|
mode: IDBTransactionMode;
|
|
66
66
|
//tables: { [type: string]: Table<any, any> }; Deprecated since 2.0. Obsolete from v3.0.
|
|
67
67
|
storeNames: Array<string>;
|
|
68
|
+
explicit?: boolean;
|
|
68
69
|
parent?: Transaction;
|
|
69
70
|
on: TransactionEvents;
|
|
70
71
|
abort(): void;
|
|
@@ -84,7 +85,7 @@ export interface DeletingHookContext<T, Key> {
|
|
|
84
85
|
onsuccess?: () => void;
|
|
85
86
|
onerror?: (err: any) => void;
|
|
86
87
|
}
|
|
87
|
-
export interface TableHooks<T = any, TKey = IndexableType> extends DexieEventSet {
|
|
88
|
+
export interface TableHooks<T = any, TKey = IndexableType, TInsertType = T> extends DexieEventSet {
|
|
88
89
|
(eventName: "creating", subscriber: (this: CreatingHookContext<T, TKey>, primKey: TKey, obj: T, transaction: Transaction) => void | undefined | TKey): void;
|
|
89
90
|
(eventName: "reading", subscriber: (obj: T) => T | any): void;
|
|
90
91
|
(eventName: "updating", subscriber: (this: UpdatingHookContext<T, TKey>, modifications: Object, primKey: TKey, obj: T, transaction: Transaction) => any): void;
|
|
@@ -95,33 +96,33 @@ export interface TableHooks<T = any, TKey = IndexableType> extends DexieEventSet
|
|
|
95
96
|
deleting: DexieEvent;
|
|
96
97
|
}
|
|
97
98
|
export type ThenShortcut<T, TResult> = (value: T) => TResult | PromiseLike<TResult>;
|
|
98
|
-
export interface WhereClause<T = any, TKey = IndexableType> {
|
|
99
|
-
above(key: any): Collection<T, TKey>;
|
|
100
|
-
aboveOrEqual(key: any): Collection<T, TKey>;
|
|
101
|
-
anyOf(keys: ReadonlyArray<IndexableType>): Collection<T, TKey>;
|
|
102
|
-
anyOf(...keys: Array<IndexableType>): Collection<T, TKey>;
|
|
103
|
-
anyOfIgnoreCase(keys: string[]): Collection<T, TKey>;
|
|
104
|
-
anyOfIgnoreCase(...keys: string[]): Collection<T, TKey>;
|
|
105
|
-
below(key: any): Collection<T, TKey>;
|
|
106
|
-
belowOrEqual(key: any): Collection<T, TKey>;
|
|
107
|
-
between(lower: any, upper: any, includeLower?: boolean, includeUpper?: boolean): Collection<T, TKey>;
|
|
108
|
-
equals(key: IndexableType): Collection<T, TKey>;
|
|
109
|
-
equalsIgnoreCase(key: string): Collection<T, TKey>;
|
|
99
|
+
export interface WhereClause<T = any, TKey = IndexableType, TInsertType = T> {
|
|
100
|
+
above(key: any): Collection<T, TKey, TInsertType>;
|
|
101
|
+
aboveOrEqual(key: any): Collection<T, TKey, TInsertType>;
|
|
102
|
+
anyOf(keys: ReadonlyArray<IndexableType>): Collection<T, TKey, TInsertType>;
|
|
103
|
+
anyOf(...keys: Array<IndexableType>): Collection<T, TKey, TInsertType>;
|
|
104
|
+
anyOfIgnoreCase(keys: string[]): Collection<T, TKey, TInsertType>;
|
|
105
|
+
anyOfIgnoreCase(...keys: string[]): Collection<T, TKey, TInsertType>;
|
|
106
|
+
below(key: any): Collection<T, TKey, TInsertType>;
|
|
107
|
+
belowOrEqual(key: any): Collection<T, TKey, TInsertType>;
|
|
108
|
+
between(lower: any, upper: any, includeLower?: boolean, includeUpper?: boolean): Collection<T, TKey, TInsertType>;
|
|
109
|
+
equals(key: IndexableType): Collection<T, TKey, TInsertType>;
|
|
110
|
+
equalsIgnoreCase(key: string): Collection<T, TKey, TInsertType>;
|
|
110
111
|
inAnyRange(ranges: ReadonlyArray<{
|
|
111
112
|
0: any;
|
|
112
113
|
1: any;
|
|
113
114
|
}>, options?: {
|
|
114
115
|
includeLowers?: boolean;
|
|
115
116
|
includeUppers?: boolean;
|
|
116
|
-
}): Collection<T, TKey>;
|
|
117
|
-
startsWith(key: string): Collection<T, TKey>;
|
|
118
|
-
startsWithAnyOf(prefixes: string[]): Collection<T, TKey>;
|
|
119
|
-
startsWithAnyOf(...prefixes: string[]): Collection<T, TKey>;
|
|
120
|
-
startsWithIgnoreCase(key: string): Collection<T, TKey>;
|
|
121
|
-
startsWithAnyOfIgnoreCase(prefixes: string[]): Collection<T, TKey>;
|
|
122
|
-
startsWithAnyOfIgnoreCase(...prefixes: string[]): Collection<T, TKey>;
|
|
123
|
-
noneOf(keys: ReadonlyArray<IndexableType>): Collection<T, TKey>;
|
|
124
|
-
notEqual(key: IndexableType): Collection<T, TKey>;
|
|
117
|
+
}): Collection<T, TKey, TInsertType>;
|
|
118
|
+
startsWith(key: string): Collection<T, TKey, TInsertType>;
|
|
119
|
+
startsWithAnyOf(prefixes: string[]): Collection<T, TKey, TInsertType>;
|
|
120
|
+
startsWithAnyOf(...prefixes: string[]): Collection<T, TKey, TInsertType>;
|
|
121
|
+
startsWithIgnoreCase(key: string): Collection<T, TKey, TInsertType>;
|
|
122
|
+
startsWithAnyOfIgnoreCase(prefixes: string[]): Collection<T, TKey, TInsertType>;
|
|
123
|
+
startsWithAnyOfIgnoreCase(...prefixes: string[]): Collection<T, TKey, TInsertType>;
|
|
124
|
+
noneOf(keys: ReadonlyArray<IndexableType>): Collection<T, TKey, TInsertType>;
|
|
125
|
+
notEqual(key: IndexableType): Collection<T, TKey, TInsertType>;
|
|
125
126
|
}
|
|
126
127
|
export interface PromiseExtendedConstructor extends PromiseConstructor {
|
|
127
128
|
readonly prototype: PromiseExtended;
|
|
@@ -357,20 +358,21 @@ export interface PromiseExtended<T = any> extends Promise<T> {
|
|
|
357
358
|
timeout(ms: number, msg?: string): PromiseExtended<T>;
|
|
358
359
|
}
|
|
359
360
|
export type KeyPaths<T> = {
|
|
360
|
-
[P in keyof T]: P extends string ? T[P] extends
|
|
361
|
+
[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
|
|
362
|
+
? P | `${P}.${number}` | `${P}.${number}.${KeyPaths<K>}` : P | `${P}.${number}` : T[P] extends (...args: any[]) => any // Method
|
|
361
363
|
? never : T[P] extends object ? P | `${P}.${KeyPaths<T[P]>}` : P : never;
|
|
362
364
|
}[keyof T];
|
|
363
365
|
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;
|
|
364
366
|
export type UpdateSpec<T> = {
|
|
365
367
|
[KP in KeyPaths<T>]?: KeyPathValue<T, KP>;
|
|
366
368
|
};
|
|
367
|
-
export interface Collection<T = any, TKey = IndexableType> {
|
|
369
|
+
export interface Collection<T = any, TKey = IndexableType, TInsertType = T> {
|
|
368
370
|
db: Dexie;
|
|
369
|
-
and(filter: (x: T) => boolean): Collection<T, TKey>;
|
|
370
|
-
clone(props?: Object): Collection<T, TKey>;
|
|
371
|
+
and(filter: (x: T) => boolean): Collection<T, TKey, TInsertType>;
|
|
372
|
+
clone(props?: Object): Collection<T, TKey, TInsertType>;
|
|
371
373
|
count(): PromiseExtended<number>;
|
|
372
374
|
count<R>(thenShortcut: ThenShortcut<number, R>): PromiseExtended<R>;
|
|
373
|
-
distinct(): Collection<T, TKey>;
|
|
375
|
+
distinct(): Collection<T, TKey, TInsertType>;
|
|
374
376
|
each(callback: (obj: T, cursor: {
|
|
375
377
|
key: IndexableType;
|
|
376
378
|
primaryKey: TKey;
|
|
@@ -388,7 +390,7 @@ export interface Collection<T = any, TKey = IndexableType> {
|
|
|
388
390
|
primaryKey: TKey;
|
|
389
391
|
}) => any): PromiseExtended<void>;
|
|
390
392
|
filter<S extends T>(filter: (x: T) => x is S): Collection<S, TKey>;
|
|
391
|
-
filter(filter: (x: T) => boolean): Collection<T, TKey>;
|
|
393
|
+
filter(filter: (x: T) => boolean): Collection<T, TKey, TInsertType>;
|
|
392
394
|
first(): PromiseExtended<T | undefined>;
|
|
393
395
|
first<R>(thenShortcut: ThenShortcut<T | undefined, R>): PromiseExtended<R>;
|
|
394
396
|
keys(): PromiseExtended<IndexableTypeArray>;
|
|
@@ -397,24 +399,106 @@ export interface Collection<T = any, TKey = IndexableType> {
|
|
|
397
399
|
primaryKeys<R>(thenShortcut: ThenShortcut<TKey[], R>): PromiseExtended<R>;
|
|
398
400
|
last(): PromiseExtended<T | undefined>;
|
|
399
401
|
last<R>(thenShortcut: ThenShortcut<T | undefined, R>): PromiseExtended<R>;
|
|
400
|
-
limit(n: number): Collection<T, TKey>;
|
|
401
|
-
offset(n: number): Collection<T, TKey>;
|
|
402
|
-
or(indexOrPrimayKey: string): WhereClause<T, TKey>;
|
|
403
|
-
raw(): Collection<T, TKey>;
|
|
404
|
-
reverse(): Collection<T, TKey>;
|
|
402
|
+
limit(n: number): Collection<T, TKey, TInsertType>;
|
|
403
|
+
offset(n: number): Collection<T, TKey, TInsertType>;
|
|
404
|
+
or(indexOrPrimayKey: string): WhereClause<T, TKey, TInsertType>;
|
|
405
|
+
raw(): Collection<T, TKey, TInsertType>;
|
|
406
|
+
reverse(): Collection<T, TKey, TInsertType>;
|
|
405
407
|
sortBy(keyPath: string): PromiseExtended<T[]>;
|
|
406
408
|
sortBy<R>(keyPath: string, thenShortcut: ThenShortcut<T[], R>): PromiseExtended<R>;
|
|
407
409
|
toArray(): PromiseExtended<Array<T>>;
|
|
408
410
|
toArray<R>(thenShortcut: ThenShortcut<T[], R>): PromiseExtended<R>;
|
|
409
411
|
uniqueKeys(): PromiseExtended<IndexableTypeArray>;
|
|
410
412
|
uniqueKeys<R>(thenShortcut: ThenShortcut<IndexableTypeArray, R>): PromiseExtended<R>;
|
|
411
|
-
until(filter: (value: T) => boolean, includeStopEntry?: boolean): Collection<T, TKey>;
|
|
413
|
+
until(filter: (value: T) => boolean, includeStopEntry?: boolean): Collection<T, TKey, TInsertType>;
|
|
412
414
|
// Mutating methods
|
|
413
415
|
delete(): PromiseExtended<number>;
|
|
414
416
|
modify(changeCallback: (obj: T, ctx: {
|
|
415
|
-
value:
|
|
417
|
+
value: TInsertType;
|
|
416
418
|
}) => void | boolean): PromiseExtended<number>;
|
|
417
|
-
modify(changes: UpdateSpec<
|
|
419
|
+
modify(changes: UpdateSpec<TInsertType>): PromiseExtended<number>;
|
|
420
|
+
}
|
|
421
|
+
export type IntervalTree = IntervalTreeNode | EmptyRange;
|
|
422
|
+
export interface IntervalTreeNode {
|
|
423
|
+
from: IndexableType; // lower bound
|
|
424
|
+
to: IndexableType; // upper bound
|
|
425
|
+
l: IntervalTreeNode | null; // left
|
|
426
|
+
r: IntervalTreeNode | null; // right
|
|
427
|
+
d: number; // depth
|
|
428
|
+
}
|
|
429
|
+
export interface EmptyRange {
|
|
430
|
+
d: 0;
|
|
431
|
+
}
|
|
432
|
+
export interface DexieOnReadyEvent {
|
|
433
|
+
subscribe(fn: (vipDb: Dexie) => any, bSticky: boolean): void;
|
|
434
|
+
unsubscribe(fn: (vipDb: Dexie) => any): void;
|
|
435
|
+
fire(vipDb: Dexie): any;
|
|
436
|
+
}
|
|
437
|
+
export interface DexieVersionChangeEvent {
|
|
438
|
+
subscribe(fn: (event: IDBVersionChangeEvent) => any): void;
|
|
439
|
+
unsubscribe(fn: (event: IDBVersionChangeEvent) => any): void;
|
|
440
|
+
fire(event: IDBVersionChangeEvent): any;
|
|
441
|
+
}
|
|
442
|
+
export interface DexiePopulateEvent {
|
|
443
|
+
subscribe(fn: (trans: Transaction) => any): void;
|
|
444
|
+
unsubscribe(fn: (trans: Transaction) => any): void;
|
|
445
|
+
fire(trans: Transaction): any;
|
|
446
|
+
}
|
|
447
|
+
export interface DexieCloseEvent {
|
|
448
|
+
subscribe(fn: (event: Event) => any): void;
|
|
449
|
+
unsubscribe(fn: (event: Event) => any): void;
|
|
450
|
+
fire(event: Event): any;
|
|
451
|
+
}
|
|
452
|
+
export interface DbEvents extends DexieEventSet {
|
|
453
|
+
(eventName: "ready", subscriber: (vipDb: Dexie) => any, bSticky?: boolean): void;
|
|
454
|
+
(eventName: "populate", subscriber: (trans: Transaction) => any): void;
|
|
455
|
+
(eventName: "blocked", subscriber: (event: IDBVersionChangeEvent) => any): void;
|
|
456
|
+
(eventName: "versionchange", subscriber: (event: IDBVersionChangeEvent) => any): void;
|
|
457
|
+
(eventName: "close", subscriber: (event: Event) => any): void;
|
|
458
|
+
ready: DexieOnReadyEvent;
|
|
459
|
+
populate: DexiePopulateEvent;
|
|
460
|
+
blocked: DexieEvent;
|
|
461
|
+
versionchange: DexieVersionChangeEvent;
|
|
462
|
+
close: DexieCloseEvent;
|
|
463
|
+
}
|
|
464
|
+
/** Set of mutated parts of the database
|
|
465
|
+
*/
|
|
466
|
+
export type ObservabilitySet = {
|
|
467
|
+
/** Database part having been mutated.
|
|
468
|
+
*
|
|
469
|
+
* This structure is produced in observability-middleware.ts
|
|
470
|
+
* and consumed in live-query.ts.
|
|
471
|
+
*
|
|
472
|
+
* Format of 'part':
|
|
473
|
+
*
|
|
474
|
+
* `idb://${dbName}/${tableName}/${indexName}`
|
|
475
|
+
*
|
|
476
|
+
* * dbName is the database name
|
|
477
|
+
* * tableName is the table name
|
|
478
|
+
* * indexName is any of:
|
|
479
|
+
* 1. An empty string - represents the primary keys of the affected objs
|
|
480
|
+
* 2. ":dels" - represents primary keys of deleted objects in the table
|
|
481
|
+
* 3. The keyPath of an index, such as "name", "age" or "address.city" -
|
|
482
|
+
* represents indexes that, if used in a query, might affect the
|
|
483
|
+
* result of that query.
|
|
484
|
+
*
|
|
485
|
+
* IntervalTree
|
|
486
|
+
* * See definition of IntervalTree type in rangeset.d.ts
|
|
487
|
+
* * See rangesOverlap() in rangeset.ts that can be used to compare two
|
|
488
|
+
* IntervalTrees and detect collissions.
|
|
489
|
+
* * See RangeSet class that can be used to create an IntervalTree and add
|
|
490
|
+
* ranges to it.
|
|
491
|
+
*/
|
|
492
|
+
[part: string]: IntervalTree;
|
|
493
|
+
};
|
|
494
|
+
export interface DexieOnStorageMutatedEvent {
|
|
495
|
+
subscribe(fn: (parts: ObservabilitySet) => any): void;
|
|
496
|
+
unsubscribe(fn: (parts: ObservabilitySet) => any): void;
|
|
497
|
+
fire(parts: ObservabilitySet): any;
|
|
498
|
+
}
|
|
499
|
+
export interface GlobalDexieEvents extends DexieEventSet {
|
|
500
|
+
(eventName: "storagemutated", subscriber: (parts: ObservabilitySet) => any): void;
|
|
501
|
+
storagemutated: DexieOnStorageMutatedEvent;
|
|
418
502
|
}
|
|
419
503
|
export const enum DBCoreRangeType {
|
|
420
504
|
Equal = 1,
|
|
@@ -449,6 +533,7 @@ export interface DBCoreAddRequest {
|
|
|
449
533
|
trans: DBCoreTransaction;
|
|
450
534
|
values: readonly any[];
|
|
451
535
|
keys?: any[];
|
|
536
|
+
mutatedParts?: ObservabilitySet;
|
|
452
537
|
/** @deprecated Will always get results since 3.1.0-alpha.5 */
|
|
453
538
|
wantResults?: boolean;
|
|
454
539
|
}
|
|
@@ -457,6 +542,7 @@ export interface DBCorePutRequest {
|
|
|
457
542
|
trans: DBCoreTransaction;
|
|
458
543
|
values: readonly any[];
|
|
459
544
|
keys?: any[];
|
|
545
|
+
mutatedParts?: ObservabilitySet;
|
|
460
546
|
criteria?: {
|
|
461
547
|
index: string | null;
|
|
462
548
|
range: DBCoreKeyRange;
|
|
@@ -477,6 +563,7 @@ export interface DBCoreDeleteRequest {
|
|
|
477
563
|
type: "delete";
|
|
478
564
|
trans: DBCoreTransaction;
|
|
479
565
|
keys: any[];
|
|
566
|
+
mutatedParts?: ObservabilitySet;
|
|
480
567
|
criteria?: {
|
|
481
568
|
index: string | null;
|
|
482
569
|
range: DBCoreKeyRange;
|
|
@@ -486,15 +573,18 @@ export interface DBCoreDeleteRangeRequest {
|
|
|
486
573
|
type: "deleteRange";
|
|
487
574
|
trans: DBCoreTransaction;
|
|
488
575
|
range: DBCoreKeyRange;
|
|
576
|
+
mutatedParts?: ObservabilitySet;
|
|
489
577
|
}
|
|
490
578
|
export interface DBCoreGetManyRequest {
|
|
491
579
|
trans: DBCoreTransaction;
|
|
492
580
|
keys: any[];
|
|
493
581
|
cache?: "immutable" | "clone";
|
|
582
|
+
obsSet?: ObservabilitySet;
|
|
494
583
|
}
|
|
495
584
|
export interface DBCoreGetRequest {
|
|
496
585
|
trans: DBCoreTransaction;
|
|
497
586
|
key: any;
|
|
587
|
+
obsSet?: ObservabilitySet;
|
|
498
588
|
}
|
|
499
589
|
export interface DBCoreQuery {
|
|
500
590
|
index: DBCoreIndex; //keyPath: null | string | string[]; // null represents primary key. string a property, string[] several properties.
|
|
@@ -505,6 +595,7 @@ export interface DBCoreQueryRequest {
|
|
|
505
595
|
values?: boolean;
|
|
506
596
|
limit?: number;
|
|
507
597
|
query: DBCoreQuery;
|
|
598
|
+
obsSet?: ObservabilitySet;
|
|
508
599
|
}
|
|
509
600
|
export interface DBCoreQueryResponse {
|
|
510
601
|
result: any[];
|
|
@@ -515,10 +606,12 @@ export interface DBCoreOpenCursorRequest {
|
|
|
515
606
|
unique?: boolean;
|
|
516
607
|
reverse?: boolean;
|
|
517
608
|
query: DBCoreQuery;
|
|
609
|
+
obsSet?: ObservabilitySet;
|
|
518
610
|
}
|
|
519
611
|
export interface DBCoreCountRequest {
|
|
520
612
|
trans: DBCoreTransaction;
|
|
521
613
|
query: DBCoreQuery;
|
|
614
|
+
obsSet?: ObservabilitySet;
|
|
522
615
|
}
|
|
523
616
|
export interface DBCoreCursor {
|
|
524
617
|
readonly trans: DBCoreTransaction;
|
|
@@ -563,6 +656,8 @@ export interface DBCoreIndex {
|
|
|
563
656
|
readonly multiEntry?: boolean;
|
|
564
657
|
/** Extract (using keyPath) a key from given value (object). Null for outbound primary keys */
|
|
565
658
|
readonly extractKey: ((value: any) => any) | null;
|
|
659
|
+
/** If this index is a virtual index, lowLevelIndex represents the actual IndexedDB index behind it */
|
|
660
|
+
readonly lowLevelIndex?: DBCoreIndex;
|
|
566
661
|
}
|
|
567
662
|
export interface DBCore {
|
|
568
663
|
stack: "dbcore";
|
|
@@ -584,11 +679,11 @@ export interface DBCoreTable {
|
|
|
584
679
|
openCursor(req: DBCoreOpenCursorRequest): Promise<DBCoreCursor | null>;
|
|
585
680
|
count(req: DBCoreCountRequest): Promise<number>;
|
|
586
681
|
}
|
|
587
|
-
export interface Table<T = any, TKey =
|
|
682
|
+
export interface Table<T = any, TKey = any, TInsertType = T> {
|
|
588
683
|
db: Dexie;
|
|
589
684
|
name: string;
|
|
590
685
|
schema: TableSchema;
|
|
591
|
-
hook: TableHooks<T, TKey>;
|
|
686
|
+
hook: TableHooks<T, TKey, TInsertType>;
|
|
592
687
|
core: DBCoreTable;
|
|
593
688
|
get(key: TKey): PromiseExtended<T | undefined>;
|
|
594
689
|
get<R>(key: TKey, thenShortcut: ThenShortcut<T | undefined, R>): PromiseExtended<R>;
|
|
@@ -598,27 +693,27 @@ export interface Table<T = any, TKey = IndexableType, TInsertType = T> {
|
|
|
598
693
|
get<R>(equalityCriterias: {
|
|
599
694
|
[key: string]: any;
|
|
600
695
|
}, thenShortcut: ThenShortcut<T | undefined, R>): PromiseExtended<R>;
|
|
601
|
-
where(index: string | string[]): WhereClause<T, TKey>;
|
|
696
|
+
where(index: string | string[]): WhereClause<T, TKey, TInsertType>;
|
|
602
697
|
where(equalityCriterias: {
|
|
603
698
|
[key: string]: any;
|
|
604
|
-
}): Collection<T, TKey>;
|
|
605
|
-
filter(fn: (obj: T) => boolean): Collection<T, TKey>;
|
|
699
|
+
}): Collection<T, TKey, TInsertType>;
|
|
700
|
+
filter(fn: (obj: T) => boolean): Collection<T, TKey, TInsertType>;
|
|
606
701
|
count(): PromiseExtended<number>;
|
|
607
702
|
count<R>(thenShortcut: ThenShortcut<number, R>): PromiseExtended<R>;
|
|
608
|
-
offset(n: number): Collection<T, TKey>;
|
|
609
|
-
limit(n: number): Collection<T, TKey>;
|
|
703
|
+
offset(n: number): Collection<T, TKey, TInsertType>;
|
|
704
|
+
limit(n: number): Collection<T, TKey, TInsertType>;
|
|
610
705
|
each(callback: (obj: T, cursor: {
|
|
611
706
|
key: any;
|
|
612
707
|
primaryKey: TKey;
|
|
613
708
|
}) => any): PromiseExtended<void>;
|
|
614
709
|
toArray(): PromiseExtended<Array<T>>;
|
|
615
710
|
toArray<R>(thenShortcut: ThenShortcut<T[], R>): PromiseExtended<R>;
|
|
616
|
-
toCollection(): Collection<T, TKey>;
|
|
617
|
-
orderBy(index: string | string[]): Collection<T, TKey>;
|
|
618
|
-
reverse(): Collection<T, TKey>;
|
|
711
|
+
toCollection(): Collection<T, TKey, TInsertType>;
|
|
712
|
+
orderBy(index: string | string[]): Collection<T, TKey, TInsertType>;
|
|
713
|
+
reverse(): Collection<T, TKey, TInsertType>;
|
|
619
714
|
mapToClass(constructor: Function): Function;
|
|
620
715
|
add(item: TInsertType, key?: TKey): PromiseExtended<TKey>;
|
|
621
|
-
update(key: TKey | T, changes: UpdateSpec<
|
|
716
|
+
update(key: TKey | T, changes: UpdateSpec<TInsertType> | ((obj: T, ctx: {
|
|
622
717
|
value: any;
|
|
623
718
|
primKey: IndexableType;
|
|
624
719
|
}) => void | boolean)): PromiseExtended<number>;
|
|
@@ -656,88 +751,6 @@ export interface Version {
|
|
|
656
751
|
}): Version;
|
|
657
752
|
upgrade(fn: (trans: Transaction) => PromiseLike<any> | void): Version;
|
|
658
753
|
}
|
|
659
|
-
export type IntervalTree = IntervalTreeNode | EmptyRange;
|
|
660
|
-
export interface IntervalTreeNode {
|
|
661
|
-
from: IndexableType; // lower bound
|
|
662
|
-
to: IndexableType; // upper bound
|
|
663
|
-
l: IntervalTreeNode | null; // left
|
|
664
|
-
r: IntervalTreeNode | null; // right
|
|
665
|
-
d: number; // depth
|
|
666
|
-
}
|
|
667
|
-
export interface EmptyRange {
|
|
668
|
-
d: 0;
|
|
669
|
-
}
|
|
670
|
-
export interface DexieOnReadyEvent {
|
|
671
|
-
subscribe(fn: (vipDb: Dexie) => any, bSticky: boolean): void;
|
|
672
|
-
unsubscribe(fn: (vipDb: Dexie) => any): void;
|
|
673
|
-
fire(vipDb: Dexie): any;
|
|
674
|
-
}
|
|
675
|
-
export interface DexieVersionChangeEvent {
|
|
676
|
-
subscribe(fn: (event: IDBVersionChangeEvent) => any): void;
|
|
677
|
-
unsubscribe(fn: (event: IDBVersionChangeEvent) => any): void;
|
|
678
|
-
fire(event: IDBVersionChangeEvent): any;
|
|
679
|
-
}
|
|
680
|
-
export interface DexiePopulateEvent {
|
|
681
|
-
subscribe(fn: (trans: Transaction) => any): void;
|
|
682
|
-
unsubscribe(fn: (trans: Transaction) => any): void;
|
|
683
|
-
fire(trans: Transaction): any;
|
|
684
|
-
}
|
|
685
|
-
export interface DexieCloseEvent {
|
|
686
|
-
subscribe(fn: (event: Event) => any): void;
|
|
687
|
-
unsubscribe(fn: (event: Event) => any): void;
|
|
688
|
-
fire(event: Event): any;
|
|
689
|
-
}
|
|
690
|
-
export interface DbEvents extends DexieEventSet {
|
|
691
|
-
(eventName: "ready", subscriber: (vipDb: Dexie) => any, bSticky?: boolean): void;
|
|
692
|
-
(eventName: "populate", subscriber: (trans: Transaction) => any): void;
|
|
693
|
-
(eventName: "blocked", subscriber: (event: IDBVersionChangeEvent) => any): void;
|
|
694
|
-
(eventName: "versionchange", subscriber: (event: IDBVersionChangeEvent) => any): void;
|
|
695
|
-
(eventName: "close", subscriber: (event: Event) => any): void;
|
|
696
|
-
ready: DexieOnReadyEvent;
|
|
697
|
-
populate: DexiePopulateEvent;
|
|
698
|
-
blocked: DexieEvent;
|
|
699
|
-
versionchange: DexieVersionChangeEvent;
|
|
700
|
-
close: DexieCloseEvent;
|
|
701
|
-
}
|
|
702
|
-
/** Set of mutated parts of the database
|
|
703
|
-
*/
|
|
704
|
-
export type ObservabilitySet = {
|
|
705
|
-
/** Database part having been mutated.
|
|
706
|
-
*
|
|
707
|
-
* This structure is produced in observability-middleware.ts
|
|
708
|
-
* and consumed in live-query.ts.
|
|
709
|
-
*
|
|
710
|
-
* Format of 'part':
|
|
711
|
-
*
|
|
712
|
-
* `idb://${dbName}/${tableName}/${indexName}`
|
|
713
|
-
*
|
|
714
|
-
* * dbName is the database name
|
|
715
|
-
* * tableName is the table name
|
|
716
|
-
* * indexName is any of:
|
|
717
|
-
* 1. An empty string - represents the primary keys of the affected objs
|
|
718
|
-
* 2. ":dels" - represents primary keys of deleted objects in the table
|
|
719
|
-
* 3. The keyPath of an index, such as "name", "age" or "address.city" -
|
|
720
|
-
* represents indexes that, if used in a query, might affect the
|
|
721
|
-
* result of that query.
|
|
722
|
-
*
|
|
723
|
-
* IntervalTree
|
|
724
|
-
* * See definition of IntervalTree type in rangeset.d.ts
|
|
725
|
-
* * See rangesOverlap() in rangeset.ts that can be used to compare two
|
|
726
|
-
* IntervalTrees and detect collissions.
|
|
727
|
-
* * See RangeSet class that can be used to create an IntervalTree and add
|
|
728
|
-
* ranges to it.
|
|
729
|
-
*/
|
|
730
|
-
[part: string]: IntervalTree;
|
|
731
|
-
};
|
|
732
|
-
export interface DexieOnStorageMutatedEvent {
|
|
733
|
-
subscribe(fn: (parts: ObservabilitySet) => any): void;
|
|
734
|
-
unsubscribe(fn: (parts: ObservabilitySet) => any): void;
|
|
735
|
-
fire(parts: ObservabilitySet): any;
|
|
736
|
-
}
|
|
737
|
-
export interface GlobalDexieEvents extends DexieEventSet {
|
|
738
|
-
(eventName: "storagemutated", subscriber: (parts: ObservabilitySet) => any): void;
|
|
739
|
-
storagemutated: DexieOnStorageMutatedEvent;
|
|
740
|
-
}
|
|
741
754
|
export type TransactionMode = "readonly" | "readwrite" | "r" | "r!" | "r?" | "rw" | "rw!" | "rw?";
|
|
742
755
|
export type DbSchema = {
|
|
743
756
|
[tableName: string]: TableSchema;
|
|
@@ -788,8 +801,12 @@ export interface Dexie {
|
|
|
788
801
|
transaction<U>(mode: TransactionMode, table: string | Table, table2: string | Table, table3: string | Table, scope: (trans: TXWithTables<this>) => PromiseLike<U> | U): PromiseExtended<U>;
|
|
789
802
|
transaction<U>(mode: TransactionMode, table: string | Table, table2: string | Table, table3: string | Table, table4: string | Table, scope: (trans: TXWithTables<this>) => PromiseLike<U> | U): PromiseExtended<U>;
|
|
790
803
|
transaction<U>(mode: TransactionMode, table: string | Table, table2: string | Table, table3: string | Table, table5: string | Table, scope: (trans: TXWithTables<this>) => PromiseLike<U> | U): PromiseExtended<U>;
|
|
791
|
-
close(
|
|
792
|
-
|
|
804
|
+
close(closeOptions?: {
|
|
805
|
+
disableAutoOpen: boolean;
|
|
806
|
+
}): void;
|
|
807
|
+
delete(closeOptions?: {
|
|
808
|
+
disableAutoOpen: boolean;
|
|
809
|
+
}): PromiseExtended<void>;
|
|
793
810
|
isOpen(): boolean;
|
|
794
811
|
hasBeenClosed(): boolean;
|
|
795
812
|
hasFailed(): boolean;
|
|
@@ -967,10 +984,18 @@ declare global {
|
|
|
967
984
|
readonly observable: symbol;
|
|
968
985
|
}
|
|
969
986
|
}
|
|
987
|
+
export interface Subscribable<T> {
|
|
988
|
+
subscribe(observer: Partial<Observer<T>>): Unsubscribable;
|
|
989
|
+
}
|
|
990
|
+
export interface Unsubscribable {
|
|
991
|
+
unsubscribe(): void;
|
|
992
|
+
}
|
|
970
993
|
export interface Observable<T = any> {
|
|
971
|
-
subscribe(
|
|
972
|
-
subscribe(
|
|
973
|
-
|
|
994
|
+
subscribe(observerOrNext?: Observer<T> | ((value: T) => void)): Subscription;
|
|
995
|
+
subscribe(next?: ((value: T) => void) | null, error?: ((error: any) => void) | null, complete?: (() => void) | null): Subscription;
|
|
996
|
+
getValue?(): T;
|
|
997
|
+
hasValue?(): boolean;
|
|
998
|
+
[Symbol.observable]: () => Subscribable<T>;
|
|
974
999
|
}
|
|
975
1000
|
export interface Subscription {
|
|
976
1001
|
unsubscribe(): void;
|
|
@@ -982,6 +1007,40 @@ export interface Observer<T = any> {
|
|
|
982
1007
|
error?: (error: any) => void;
|
|
983
1008
|
complete?: () => void;
|
|
984
1009
|
}
|
|
1010
|
+
export type GlobalQueryCache = {
|
|
1011
|
+
// TODO: Change to parts: {[part: string]: TblQueryCache}
|
|
1012
|
+
// och unsignaledParts: ObservabilitySet;
|
|
1013
|
+
[part: string]: TblQueryCache; // part is `idb://${dbName}/${tableName}`
|
|
1014
|
+
};
|
|
1015
|
+
export interface TblQueryCache {
|
|
1016
|
+
queries: {
|
|
1017
|
+
query: {
|
|
1018
|
+
[indexName: string]: CacheEntry[];
|
|
1019
|
+
};
|
|
1020
|
+
count: {
|
|
1021
|
+
[indexName: string]: CacheEntry[];
|
|
1022
|
+
};
|
|
1023
|
+
};
|
|
1024
|
+
objs: Map<string | number, object>;
|
|
1025
|
+
optimisticOps: DBCoreMutateRequest[];
|
|
1026
|
+
unsignaledParts: ObservabilitySet;
|
|
1027
|
+
}
|
|
1028
|
+
export interface CacheEntryCommon {
|
|
1029
|
+
subscribers: Set<() => void>;
|
|
1030
|
+
obsSet: ObservabilitySet;
|
|
1031
|
+
//txObsSet: ObservabilitySet;
|
|
1032
|
+
promise: Promise<any>;
|
|
1033
|
+
dirty: boolean;
|
|
1034
|
+
}
|
|
1035
|
+
export type CacheEntry = CacheEntryCommon & ({
|
|
1036
|
+
type: "query";
|
|
1037
|
+
req: DBCoreQueryRequest;
|
|
1038
|
+
res?: readonly any[];
|
|
1039
|
+
} | {
|
|
1040
|
+
type: "count";
|
|
1041
|
+
req: DBCoreCountRequest;
|
|
1042
|
+
res?: number;
|
|
1043
|
+
});
|
|
985
1044
|
export type ChromeTransactionDurability = "default" | "strict" | "relaxed";
|
|
986
1045
|
export interface DexieOptions {
|
|
987
1046
|
addons?: Array<(db: Dexie) => void>;
|
|
@@ -997,6 +1056,7 @@ export interface DexieOptions {
|
|
|
997
1056
|
allowEmptyDB?: boolean;
|
|
998
1057
|
modifyChunkSize?: number;
|
|
999
1058
|
chromeTransactionDurability?: ChromeTransactionDurability;
|
|
1059
|
+
cache?: "immutable" | "cloned" | "disabled";
|
|
1000
1060
|
}
|
|
1001
1061
|
export interface DexieConstructor extends DexieExceptionClasses {
|
|
1002
1062
|
new (databaseName: string, options?: DexieOptions): Dexie;
|
|
@@ -1010,6 +1070,7 @@ export interface DexieConstructor extends DexieExceptionClasses {
|
|
|
1010
1070
|
getDatabaseNames<R>(thenShortcut: ThenShortcut<string[], R>): Promise<R>;
|
|
1011
1071
|
vip<U>(scopeFunction: () => U): U;
|
|
1012
1072
|
ignoreTransaction<U>(fn: () => U): U;
|
|
1073
|
+
disableBfCache?: boolean;
|
|
1013
1074
|
liveQuery<T>(fn: () => T | Promise<T>): Observable<T>;
|
|
1014
1075
|
extendObservabilitySet(target: ObservabilitySet, newSet: ObservabilitySet): ObservabilitySet;
|
|
1015
1076
|
override<F>(origFunc: F, overridedFactory: (fn: any) => any): F; // ?
|
|
@@ -1025,6 +1086,8 @@ export interface DexieConstructor extends DexieExceptionClasses {
|
|
|
1025
1086
|
delete(dbName: string): Promise<void>;
|
|
1026
1087
|
dependencies: DexieDOMDependencies;
|
|
1027
1088
|
default: Dexie; // Work-around for different build tools handling default imports differently.
|
|
1089
|
+
cache: GlobalQueryCache;
|
|
1090
|
+
debug: false | true | "dexie";
|
|
1028
1091
|
Promise: PromiseExtendedConstructor;
|
|
1029
1092
|
//TableSchema: {}; // Deprecate!
|
|
1030
1093
|
//IndexSpec: {new():IndexSpec}; //? Deprecate
|
|
@@ -1059,7 +1122,7 @@ export type InsertType<T, OptionalProps extends keyof T> = Omit<T, OptionalProps
|
|
|
1059
1122
|
export type IDType<T, TKeyPropNameOrKeyType> = IsStrictlyAny<T> extends true ? TKeyPropNameOrKeyType : TKeyPropNameOrKeyType extends string ? TKeyPropNameOrKeyType extends keyof T ? T[TKeyPropNameOrKeyType] : TKeyPropNameOrKeyType : TKeyPropNameOrKeyType;
|
|
1060
1123
|
export type EntityTable<T, TKeyPropName extends keyof T = never, TInsertType = InsertType<T, TKeyPropName>> = Table<T, IDType<T, TKeyPropName>, TInsertType>;
|
|
1061
1124
|
export declare var Dexie: DexieConstructor;
|
|
1062
|
-
export interface _Table<T, TKey> extends Table<T, TKey> {
|
|
1125
|
+
export interface _Table<T, TKey, TInsertType> extends Table<T, TKey, TInsertType> {
|
|
1063
1126
|
}
|
|
1064
1127
|
export interface _Collection<T, TKey> extends Collection<T, TKey> {
|
|
1065
1128
|
}
|
|
@@ -1067,7 +1130,7 @@ export declare module Dexie {
|
|
|
1067
1130
|
// The "Dexie.Promise" type.
|
|
1068
1131
|
type Promise<T = any> = PromiseExtended<T>; // Because many samples have been Dexie.Promise.
|
|
1069
1132
|
// The "Dexie.Table" interface. Same as named exported interface Table.
|
|
1070
|
-
interface Table<T = any, Key = any> extends _Table<T, Key> {
|
|
1133
|
+
interface Table<T = any, Key = any, TInsertType = T> extends _Table<T, Key, TInsertType> {
|
|
1071
1134
|
} // Because all samples have been Dexie.Table<...>
|
|
1072
1135
|
// The "Dexie.Collection" interface. Same as named exported interface Collection.
|
|
1073
1136
|
interface Collection<T = any, Key = any> extends _Collection<T, Key> {
|