@@ -24,65 +24,61 @@ export interface IDBFactory {
24
24
deleteDatabase ( name : string ) : IDBOpenDBRequest < undefined , null > ;
25
25
}
26
26
27
- const kv = await Deno . openKv ( ) ;
28
-
29
- export const indexedDB : IDBFactory = {
30
- open (
31
- name : string ,
32
- version : number = 1 ,
33
- ) : IDBOpenDBRequest < IDBDatabase , null > {
34
- return new _IDBOpenDBRequest ( async function ( ) {
35
- // Check if the database already exists and is up to date.
36
- const existed = await kv . get < IDBDatabaseInfo > ( $ . database ( name ) ) ;
37
- if ( existed . value ?. version && existed . value . version >= version ) {
38
- const stores = new Map < string , IDBObjectStoreParameters > ( ) ;
39
- const iter = kv . list < IDBObjectStoreParameters > ( {
40
- prefix : $ . store . prefix ,
41
- } ) ;
42
- for await ( const { key, value } of iter ) {
43
- const name = key . toReversed ( ) [ 0 ] as string ;
44
- stores . set ( name , value ) ;
27
+ export function createIDBFactory (
28
+ kv : Deno . Kv ,
29
+ ) : IDBFactory {
30
+ return {
31
+ open (
32
+ name : string ,
33
+ version : number = 1 ,
34
+ ) : IDBOpenDBRequest < IDBDatabase , null > {
35
+ return new _IDBOpenDBRequest ( async function ( ) {
36
+ // Check if the database already exists and is up to date.
37
+ const existed = await kv . get < IDBDatabaseInfo > ( $ . database ( name ) ) ;
38
+ if ( existed . value ?. version && existed . value . version >= version ) {
39
+ const stores = new Map < string , IDBObjectStoreParameters > ( ) ;
40
+ const iter = kv . list < IDBObjectStoreParameters > ( {
41
+ prefix : $ . store . prefix ,
42
+ } ) ;
43
+ for await ( const { key, value } of iter ) {
44
+ const name = key . toReversed ( ) [ 0 ] as string ;
45
+ stores . set ( name , value ) ;
46
+ }
47
+ return new _IDBDatabase ( name , version , kv , stores ) ;
45
48
}
46
- return new _IDBDatabase ( name , version , kv , stores ) ;
47
- }
48
- // Create the new database.
49
- await kv . set ( $ . database ( name ) , { name, version } ) ;
50
- const db = new _IDBDatabase ( name , version , kv , new Map ( ) ) ;
51
- const transaction = new _IDBTransaction ( db , "versionchange" ) ;
52
- this . transaction = transaction as IDBTransaction < "versionchange" > ;
53
- db . _transaction = transaction ;
54
- this . result = db ;
55
- this . dispatchEvent (
56
- new _IDBVersionChangeEvent ( existed . value ?. version ?? 0 , version ) ,
57
- ) ;
58
- await new Promise ( ( resolve ) => {
59
- transaction . addEventListener ( "complete" , resolve ) ;
60
- } ) ;
61
- db . _transaction = null ;
62
- return db ;
63
- } ) as IDBOpenDBRequest < IDBDatabase , null > ;
64
- } ,
65
-
66
- cmp ( _a : unknown , _b : unknown ) : - 1 | 0 | 1 {
67
- console . warn ( "indexedDB.cmp is not implemented" ) ;
68
- return 0 ;
69
- } ,
49
+ // Create the new database.
50
+ await kv . set ( $ . database ( name ) , { name, version } ) ;
51
+ const db = new _IDBDatabase ( name , version , kv , new Map ( ) ) ;
52
+ const transaction = new _IDBTransaction ( db , "versionchange" ) ;
53
+ this . transaction = transaction as IDBTransaction < "versionchange" > ;
54
+ db . _transaction = transaction ;
55
+ this . result = db ;
56
+ this . dispatchEvent (
57
+ new _IDBVersionChangeEvent ( existed . value ?. version ?? 0 , version ) ,
58
+ ) ;
59
+ await new Promise ( ( resolve ) => {
60
+ transaction . addEventListener ( "complete" , resolve ) ;
61
+ } ) ;
62
+ db . _transaction = null ;
63
+ return db ;
64
+ } ) as IDBOpenDBRequest < IDBDatabase , null > ;
65
+ } ,
70
66
71
- async databases ( ) : Promise < IDBDatabaseInfo [ ] > {
72
- const iter = kv . list < IDBDatabaseInfo > ( { prefix : $ . database . prefix } ) ;
73
- return ( await Array . fromAsync ( iter ) ) . map ( ( it ) => it . value ) ;
74
- } ,
67
+ cmp ( _a : unknown , _b : unknown ) : - 1 | 0 | 1 {
68
+ console . warn ( "indexedDB.cmp is not implemented" ) ;
69
+ return 0 ;
70
+ } ,
75
71
76
- deleteDatabase ( name : string ) : IDBOpenDBRequest < undefined , null > {
77
- return new _IDBOpenDBRequest ( async ( ) => {
78
- await kv . delete ( $ . database ( name ) ) ;
79
- return undefined ;
80
- } ) as IDBOpenDBRequest < undefined , null > ;
81
- } ,
82
- } ;
72
+ async databases ( ) : Promise < IDBDatabaseInfo [ ] > {
73
+ const iter = kv . list < IDBDatabaseInfo > ( { prefix : $ . database . prefix } ) ;
74
+ return ( await Array . fromAsync ( iter ) ) . map ( ( it ) => it . value ) ;
75
+ } ,
83
76
84
- if ( self . indexedDB === undefined && self . Deno . Kv ) {
85
- console . warn ( "Using an experimental IndexedDB polyfill with Deno KV" ) ;
86
- // @ts -ignore We type IDBFactory better
87
- self . indexedDB = indexedDB ;
77
+ deleteDatabase ( name : string ) : IDBOpenDBRequest < undefined , null > {
78
+ return new _IDBOpenDBRequest ( async ( ) => {
79
+ await kv . delete ( $ . database ( name ) ) ;
80
+ return undefined ;
81
+ } ) as IDBOpenDBRequest < undefined , null > ;
82
+ } ,
83
+ } ;
88
84
}
0 commit comments