git.iko.soy/purescript-indexed-DB
on master help sign in
provide oldVersion metadata as part of the onUpgradeNeeded callback
c64384dKtorZ
src/Database/IndexedDB/IDBFactory.js+5−1
@@ -14,6 +14,9 @@ const noOp2 = function noOp2() {
14 return noOp;
14 return noOp;
15};
15};
16
16
17+const noOp3 = function noOp3() {
18+ return noOp2;
19+};
17
20
18exports._deleteDatabase = function _deleteDatabase(name) {
21exports._deleteDatabase = function _deleteDatabase(name) {
19 return function aff(success, error) {
22 return function aff(success, error) {
@@ -46,7 +49,8 @@ exports._open = function _open(fromMaybe, name, mver, req) {
46 };
49 };
47
50
48 request.onupgradeneeded = function onUpgradeNeeded(e) {
51 request.onupgradeneeded = function onUpgradeNeeded(e) {
52+ const meta = { oldVersion: e.oldVersion };
49− fromMaybe(noOp2)(req.onUpgradeNeeded)(e.target.result)(e.target.transaction)();
53+ fromMaybe(noOp3)(req.onUpgradeNeeded)(e.target.result)(e.target.transaction)(meta)();
50 };
54 };
51
55
52 request.onerror = errorHandler(error);
56 request.onerror = errorHandler(error);
src/Database/IndexedDB/IDBFactory.purs+1−1
@@ -30,7 +30,7 @@ import Database.IndexedDB.Core
30-- Type alias for binding listeners to an initial open action.
30-- Type alias for binding listeners to an initial open action.
31type Callbacks e =
31type Callbacks e =
32 { onBlocked :: Maybe (Eff (| e) Unit)
32 { onBlocked :: Maybe (Eff (| e) Unit)
33− , onUpgradeNeeded :: Maybe (Database -> Transaction -> Eff (| e) Unit)
33+ , onUpgradeNeeded :: Maybe (Database -> Transaction -> { oldVersion :: Int } -> Eff (| e) Unit)
34 }
34 }
35
35
36
36
test/Main.purs+18−16
@@ -87,23 +87,25 @@ main = runMocha do
87 }
87 }
88 tearDown name version db
88 tearDown name version db
89
89
90−
91 it "open + onUpgradeNeed" do
90 it "open + onUpgradeNeed" do
92 let name = "db-upgrade-needed"
91 let name = "db-upgrade-needed"
93 version = 1
92 version = 1
94− callback var db _ = do
93+ callback (Tuple varName varVersion) db _ { oldVersion } = do
95− _ <- launchAff $ modifyVar (const $ IDBDatabase.name db) var
94+ _ <- launchAff $ modifyVar (const $ IDBDatabase.name db) varName
95+ _ <- launchAff $ modifyVar (const $ oldVersion) varVersion
96 pure unit
96 pure unit
97− var <- makeVar' "-"
97+ varName <- makeVar' "-"
98+ varVersion <- makeVar' (-1)
98− db <- IDBFactory.open name Nothing
99+ db <- IDBFactory.open name Nothing
99− { onUpgradeNeeded : Just (callback var)
100+ { onUpgradeNeeded : Just (callback (Tuple varName varVersion))
100 , onBlocked : Nothing
101 , onBlocked : Nothing
101 }
102 }
102− name <- peekVar var
103+ name' <- peekVar varName
104+ version' <- peekVar varVersion
103− name `shouldEqual` name
105+ name' `shouldEqual` name
106+ version' `shouldEqual` 0
104 tearDown name version db
107 tearDown name version db
105
108
106−
107 it "open + onBlocked" do
109 it "open + onBlocked" do
108 let name = "db-blocked"
110 let name = "db-blocked"
109 version = 14
111 version = 14
@@ -124,8 +126,8 @@ main = runMocha do
124 { onUpgradeNeeded : Nothing
126 { onUpgradeNeeded : Nothing
125 , onBlocked : Just (callback var)
127 , onBlocked : Just (callback var)
126 }
128 }
127− name <- peekVar var
129+ name' <- peekVar var
128− name `shouldEqual` name
130+ name' `shouldEqual` name
129 tearDown name version db02
131 tearDown name version db02
130
132
131 describe "IDBKeyRange" do
133 describe "IDBKeyRange" do
@@ -289,7 +291,7 @@ main = runMocha do
289 pure unit
291 pure unit
290
292
291 setup storeParams = do
293 setup storeParams = do
292− let onUpgradeNeeded var db _ = launchAff' do
294+ let onUpgradeNeeded var db _ _ = launchAff' do
293 store <- IDBDatabase.createObjectStore db "store" storeParams
295 store <- IDBDatabase.createObjectStore db "store" storeParams
294 _ <- putVar var { db, store }
296 _ <- putVar var { db, store }
295 pure unit
297 pure unit
@@ -327,7 +329,7 @@ main = runMocha do
327 tearDown db
329 tearDown db
328
330
329 it "deleteObjectStore" do
331 it "deleteObjectStore" do
330− let onUpgradeNeeded var db _ = launchAff' do
332+ let onUpgradeNeeded var db _ _ = launchAff' do
331 _ <- IDBDatabase.deleteObjectStore db "store"
333 _ <- IDBDatabase.deleteObjectStore db "store"
332 putVar var true
334 putVar var true
333
335
@@ -350,7 +352,7 @@ main = runMocha do
350 pure unit
352 pure unit
351
353
352 setup { storeParams, onUpgradeNeeded } = do
354 setup { storeParams, onUpgradeNeeded } = do
353− let onUpgradeNeeded' var db _ = launchAff' do
355+ let onUpgradeNeeded' var db _ _ = launchAff' do
354 store <- IDBDatabase.createObjectStore db "store" storeParams
356 store <- IDBDatabase.createObjectStore db "store" storeParams
355 liftEff $ maybe (pure unit) id (onUpgradeNeeded <*> pure db <*> pure store)
357 liftEff $ maybe (pure unit) id (onUpgradeNeeded <*> pure db <*> pure store)
356 putVar var { db, store }
358 putVar var { db, store }
@@ -506,7 +508,7 @@ main = runMocha do
506 , onUpgradeNeeded :: Maybe (Database -> Transaction -> Index -> Eff (idb :: IDB, avar :: AVAR, exception :: EXCEPTION | e') Unit)
508 , onUpgradeNeeded :: Maybe (Database -> Transaction -> Index -> Eff (idb :: IDB, avar :: AVAR, exception :: EXCEPTION | e') Unit)
507 } -> Aff (idb :: IDB, avar :: AVAR | e) { db :: Database, index :: Index, store :: ObjectStore }
509 } -> Aff (idb :: IDB, avar :: AVAR | e) { db :: Database, index :: Index, store :: ObjectStore }
508 setup { storeParams, indexParams, values, keyPath, onUpgradeNeeded } = do
510 setup { storeParams, indexParams, values, keyPath, onUpgradeNeeded } = do
509− let onUpgradeNeeded' var db tx = launchAff' do
511+ let onUpgradeNeeded' var db tx _ = launchAff' do
510 store <- IDBDatabase.createObjectStore db "store" storeParams
512 store <- IDBDatabase.createObjectStore db "store" storeParams
511 _ <- traverse (uncurry (IDBObjectStore.add store)) values
513 _ <- traverse (uncurry (IDBObjectStore.add store)) values
512 index <- IDBObjectStore.createIndex store "index" keyPath indexParams
514 index <- IDBObjectStore.createIndex store "index" keyPath indexParams
@@ -844,7 +846,7 @@ main = runMocha do
844 , onUpgradeNeeded :: Maybe (Database -> Transaction -> Index -> Eff (idb :: IDB, avar :: AVAR, exception :: EXCEPTION | e') Unit)
846 , onUpgradeNeeded :: Maybe (Database -> Transaction -> Index -> Eff (idb :: IDB, avar :: AVAR, exception :: EXCEPTION | e') Unit)
845 } -> Aff (idb :: IDB, avar :: AVAR | e) { db :: Database, index :: Index, store :: ObjectStore }
847 } -> Aff (idb :: IDB, avar :: AVAR | e) { db :: Database, index :: Index, store :: ObjectStore }
846 setup { storeParams, indexParams, values, keyPath, onUpgradeNeeded } = do
848 setup { storeParams, indexParams, values, keyPath, onUpgradeNeeded } = do
847− let onUpgradeNeeded' var db tx = launchAff' do
849+ let onUpgradeNeeded' var db tx _ = launchAff' do
848 store <- IDBDatabase.createObjectStore db "store" storeParams
850 store <- IDBDatabase.createObjectStore db "store" storeParams
849 _ <- traverse (uncurry (IDBObjectStore.add store)) values
851 _ <- traverse (uncurry (IDBObjectStore.add store)) values
850 index <- IDBObjectStore.createIndex store "index" keyPath indexParams
852 index <- IDBObjectStore.createIndex store "index" keyPath indexParams