-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindexeddb.class.ts
120 lines (110 loc) · 2.68 KB
/
indexeddb.class.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
// Class.
import { IDBConnection } from './idb-connection.class';
import { IDBData } from './idb-data.class';
import { IDBQuery } from './idb-query.class';
import { IDBStore } from './idb-store.class';
// Interface.
import { IDBConfig } from './interface/idb-config.interface';
// Type.
import { IDBStoreParameters } from './type/idb-store-parameters.type';
/**
*
*/
export class IndexedDB<
StoreSchema extends object,
Name extends string = string,
StoreNames extends keyof StoreSchema = keyof StoreSchema,
Version extends number = number
> {
/**
*
* @param config
* @returns
*/
public static config: <
Name extends string,
StoreNames extends string,
Version extends number = number
>(config: IDBConfig<Name, StoreNames, Version>) => IDBConfig<Name, StoreNames, Version> =
<
Name extends string,
StoreName extends string,
Version extends number = number
>(config: IDBConfig<Name, StoreName, Version>) => config;
/**
*
* @param store
* @returns
*/
public static store: <StoreNames extends string>(store: IDBStoreParameters<StoreNames>) => IDBStoreParameters<StoreNames> =
<StoreNames extends string>(store: IDBStoreParameters<StoreNames>) => store;
/**
*
*/
public get connection() {
return this.#query.connection;
}
/**
*
*/
public get store(): IDBStore<StoreSchema, Name, StoreNames, Version> {
return this.#query.objectStore;
}
/**
*
*/
public get query(): IDBQuery<StoreSchema, Name, StoreNames, Version> {
return this.#query;
}
/**
*
*/
#query!: IDBQuery<StoreSchema, Name, StoreNames, Version>;
/**
*
* @param name
* @param storeNames
* @param store
* @param version
*/
constructor(
name: Name,
storeNames: StoreNames | StoreNames[],
store?: IDBStoreParameters<StoreNames>,
version: Version = 1 as any,
) {
this.#query = new IDBQuery(
undefined,
{ name, storeNames, store, version }
);
}
/**
*
* @param onOpenSuccess
* @returns
*/
public onOpenSuccess(
onOpenSuccess: (
indexeddb: IndexedDB<StoreSchema, Name, StoreNames, Version>,
store: IDBStore<StoreSchema, Name, StoreNames, Version>,
database: IDBData<Name, StoreNames, Version>,
connection: IDBConnection<Name, StoreNames, Version>,
openRequest: IDBOpenDBRequest,
ev: Event
) => any
): this {
this.connection.request.addEventListener(
'success',
ev => onOpenSuccess(
this,
this.#query.objectStore,
this.#query.objectStore.database,
this.connection,
this.connection.request,
ev
),
true
);
return this;
}
}