idb-ts 3.11.1 → 3.13.0
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 +366 -319
- package/lib/index.d.ts +95 -6
- package/lib/index.esm.js +562 -186
- package/lib/index.js +562 -186
- package/package.json +11 -8
package/lib/index.d.ts
CHANGED
|
@@ -1,9 +1,52 @@
|
|
|
1
1
|
import 'reflect-metadata';
|
|
2
2
|
type QueryDirection = 'asc' | 'desc';
|
|
3
|
+
type QueryFieldKey<T> = Extract<keyof T, string>;
|
|
4
|
+
type ComparableValue = string | number | bigint | Date;
|
|
5
|
+
type ComparableFieldKey<T> = {
|
|
6
|
+
[K in QueryFieldKey<T>]-?: T[K] extends ComparableValue ? K : never;
|
|
7
|
+
}[QueryFieldKey<T>];
|
|
8
|
+
type NumericFieldKey<T> = {
|
|
9
|
+
[K in QueryFieldKey<T>]-?: T[K] extends number ? K : never;
|
|
10
|
+
}[QueryFieldKey<T>];
|
|
11
|
+
type StringFieldKey<T> = {
|
|
12
|
+
[K in QueryFieldKey<T>]-?: T[K] extends string ? K : never;
|
|
13
|
+
}[QueryFieldKey<T>];
|
|
14
|
+
type ArrayFieldKey<T> = {
|
|
15
|
+
[K in QueryFieldKey<T>]-?: T[K] extends readonly any[] ? K : never;
|
|
16
|
+
}[QueryFieldKey<T>];
|
|
17
|
+
type ArrayElement<T> = T extends readonly (infer U)[] ? U : never;
|
|
18
|
+
type ContainsValue<T> = T extends string ? string : T extends readonly (infer U)[] ? U : never;
|
|
19
|
+
type QueryOperator = 'equals' | 'gt' | 'gte' | 'lt' | 'lte' | 'startsWith' | 'endsWith' | 'contains' | 'matches' | 'between' | 'notBetween' | 'in' | 'notIn' | 'containsAny' | 'containsAll';
|
|
20
|
+
type GroupCountResult<T, K extends Extract<keyof T, string>> = Array<Record<K, T[K]> & {
|
|
21
|
+
count: number;
|
|
22
|
+
}>;
|
|
23
|
+
declare class FieldQueryBuilder<T, K extends QueryFieldKey<T>> {
|
|
24
|
+
private parent;
|
|
25
|
+
private field;
|
|
26
|
+
constructor(parent: QueryBuilder<T>, field: K);
|
|
27
|
+
equals(value: T[K]): QueryBuilder<T>;
|
|
28
|
+
gt(value: T[K] extends ComparableValue ? T[K] : never): QueryBuilder<T>;
|
|
29
|
+
gte(value: T[K] extends ComparableValue ? T[K] : never): QueryBuilder<T>;
|
|
30
|
+
lt(value: T[K] extends ComparableValue ? T[K] : never): QueryBuilder<T>;
|
|
31
|
+
lte(value: T[K] extends ComparableValue ? T[K] : never): QueryBuilder<T>;
|
|
32
|
+
startsWith(this: FieldQueryBuilder<T, StringFieldKey<T>>, value: string): QueryBuilder<T>;
|
|
33
|
+
endsWith(this: FieldQueryBuilder<T, StringFieldKey<T>>, value: string): QueryBuilder<T>;
|
|
34
|
+
contains(this: FieldQueryBuilder<T, StringFieldKey<T>> | FieldQueryBuilder<T, ArrayFieldKey<T>>, value: ContainsValue<T[K]>): QueryBuilder<T>;
|
|
35
|
+
matches(this: FieldQueryBuilder<T, StringFieldKey<T>>, value: RegExp | string): QueryBuilder<T>;
|
|
36
|
+
between(start: T[K] extends ComparableValue ? T[K] : never, end: T[K] extends ComparableValue ? T[K] : never): QueryBuilder<T>;
|
|
37
|
+
notBetween(start: T[K] extends ComparableValue ? T[K] : never, end: T[K] extends ComparableValue ? T[K] : never): QueryBuilder<T>;
|
|
38
|
+
in(values: Array<T[K]>): QueryBuilder<T>;
|
|
39
|
+
notIn(values: Array<T[K]>): QueryBuilder<T>;
|
|
40
|
+
containsAny(this: FieldQueryBuilder<T, ArrayFieldKey<T>>, values: Array<ArrayElement<T[K]>>): QueryBuilder<T>;
|
|
41
|
+
containsAll(this: FieldQueryBuilder<T, ArrayFieldKey<T>>, values: Array<ArrayElement<T[K]>>): QueryBuilder<T>;
|
|
42
|
+
and<K2 extends QueryFieldKey<T>>(field: K2): FieldQueryBuilder<T, K2>;
|
|
43
|
+
or(): QueryBuilder<T>;
|
|
44
|
+
}
|
|
3
45
|
declare class QueryBuilder<T> {
|
|
4
46
|
private db;
|
|
5
47
|
private storeName;
|
|
6
|
-
private
|
|
48
|
+
private transaction?;
|
|
49
|
+
private clauses;
|
|
7
50
|
private orderField?;
|
|
8
51
|
private orderDirection;
|
|
9
52
|
private limitCount?;
|
|
@@ -12,20 +55,58 @@ declare class QueryBuilder<T> {
|
|
|
12
55
|
private rangeStart?;
|
|
13
56
|
private rangeEnd?;
|
|
14
57
|
private currentField?;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
58
|
+
private groupField?;
|
|
59
|
+
private pendingConnector;
|
|
60
|
+
constructor(db: IDBDatabase, storeName: string, transaction?: IDBTransaction);
|
|
61
|
+
where<K extends QueryFieldKey<T>>(field: K): FieldQueryBuilder<T, K>;
|
|
62
|
+
where(builder: (query: QueryBuilder<T>) => QueryBuilder<T> | void): this;
|
|
63
|
+
and<K extends QueryFieldKey<T>>(field: K): FieldQueryBuilder<T, K>;
|
|
64
|
+
and(builder: (query: QueryBuilder<T>) => QueryBuilder<T> | void): this;
|
|
65
|
+
or(): this;
|
|
66
|
+
private addNestedGroup;
|
|
67
|
+
clearCurrentField(): void;
|
|
68
|
+
appendCondition(field: string, op: QueryOperator, value: any): void;
|
|
69
|
+
private appendClause;
|
|
70
|
+
private requireCurrentField;
|
|
71
|
+
private addCondition;
|
|
18
72
|
equals(value: any): this;
|
|
19
73
|
gt(value: any): this;
|
|
20
74
|
gte(value: any): this;
|
|
21
75
|
lt(value: any): this;
|
|
22
76
|
lte(value: any): this;
|
|
77
|
+
startsWith(value: string): this;
|
|
78
|
+
endsWith(value: string): this;
|
|
79
|
+
contains(value: any): this;
|
|
80
|
+
matches(value: RegExp | string): this;
|
|
81
|
+
between(start: any, end: any): this;
|
|
82
|
+
notBetween(start: any, end: any): this;
|
|
83
|
+
['in'](values: any[]): this;
|
|
84
|
+
notIn(values: any[]): this;
|
|
85
|
+
containsAny(values: any[]): this;
|
|
86
|
+
containsAll(values: any[]): this;
|
|
23
87
|
orderBy(field: Extract<keyof T, string>, direction?: QueryDirection): this;
|
|
24
88
|
limit(n: number): this;
|
|
25
89
|
offset(n: number): this;
|
|
26
90
|
useIndex(indexName: string): this;
|
|
27
91
|
range(start: any, end: any): this;
|
|
92
|
+
groupBy<K extends QueryFieldKey<T>>(field: K): QueryBuilder<T> & {
|
|
93
|
+
count(): Promise<GroupCountResult<T, K>>;
|
|
94
|
+
};
|
|
95
|
+
private loadCandidates;
|
|
96
|
+
private createReadRequest;
|
|
97
|
+
private matchesClause;
|
|
98
|
+
private evaluateClauses;
|
|
99
|
+
private collectMatches;
|
|
100
|
+
private sortResults;
|
|
101
|
+
private applyPagination;
|
|
102
|
+
private aggregateValues;
|
|
103
|
+
private aggregateGroupedCount;
|
|
28
104
|
execute(): Promise<T[]>;
|
|
105
|
+
count(): Promise<number | GroupCountResult<T, Extract<keyof T, string>>>;
|
|
106
|
+
sum(field: NumericFieldKey<T>): Promise<number>;
|
|
107
|
+
avg(field: NumericFieldKey<T>): Promise<number>;
|
|
108
|
+
min(field: ComparableFieldKey<T>): Promise<T[typeof field] | null>;
|
|
109
|
+
max(field: ComparableFieldKey<T>): Promise<T[typeof field] | null>;
|
|
29
110
|
}
|
|
30
111
|
interface KeyPathOptions {
|
|
31
112
|
autoIncrement?: boolean;
|
|
@@ -77,6 +158,11 @@ interface EntityRepository<T> {
|
|
|
77
158
|
clear(): Promise<void>;
|
|
78
159
|
query(): QueryBuilder<T>;
|
|
79
160
|
}
|
|
161
|
+
interface TransactionController {
|
|
162
|
+
commit(): Promise<void>;
|
|
163
|
+
rollback(): Promise<void>;
|
|
164
|
+
}
|
|
165
|
+
type TransactionalDatabase<T extends Record<string, EntityRepository<any>>> = T & TransactionController;
|
|
80
166
|
type DatabaseWithRepositories<T extends Record<string, any>> = Database & T;
|
|
81
167
|
declare class Database {
|
|
82
168
|
private dbName;
|
|
@@ -98,11 +184,14 @@ declare class Database {
|
|
|
98
184
|
private cleanupExpiredRecords;
|
|
99
185
|
private createEntityRepository;
|
|
100
186
|
private performOperation;
|
|
187
|
+
private createTransactionHandle;
|
|
188
|
+
beginTransaction(entityNames: string[], mode?: IDBTransactionMode): Promise<TransactionalDatabase<Record<string, EntityRepository<any>>>>;
|
|
189
|
+
transaction<T>(callback: (tx: TransactionalDatabase<Record<string, EntityRepository<any>>>) => Promise<T> | T): Promise<T>;
|
|
101
190
|
close(): void;
|
|
102
191
|
getAvailableEntities(): string[];
|
|
103
192
|
getDatabaseVersion(): number;
|
|
104
193
|
getEntityVersions(): Map<string, number>;
|
|
105
194
|
getEntityVersion(entityName: string): number | undefined;
|
|
106
195
|
}
|
|
107
|
-
export { Database, KeyPath, CompositeKeyPath, DataClass, Index, Validate, RetentionPolicy, EntityRepository, KeyGenerators };
|
|
108
|
-
export type { DatabaseWithRepositories, DataClassOptions, KeyPathOptions, KeyPathMetadata, RetentionPolicyOptions, RetentionPolicyMetadata };
|
|
196
|
+
export { Database, KeyPath, CompositeKeyPath, DataClass, Index, Validate, RetentionPolicy, EntityRepository, KeyGenerators, };
|
|
197
|
+
export type { DatabaseWithRepositories, DataClassOptions, KeyPathOptions, KeyPathMetadata, RetentionPolicyOptions, RetentionPolicyMetadata, };
|