Support database upgrades in Database.open
This commit is contained in:
parent
f50ac1c99e
commit
1e04083813
2 changed files with 27 additions and 7 deletions
|
@ -4,18 +4,31 @@
|
||||||
// and using promises. Revisit use of `idb` dependency as it might cover
|
// and using promises. Revisit use of `idb` dependency as it might cover
|
||||||
// this functionality.
|
// this functionality.
|
||||||
|
|
||||||
const { isObject } = require('lodash');
|
const { isObject, isNumber } = require('lodash');
|
||||||
|
|
||||||
|
|
||||||
exports.open = (name, version) => {
|
exports.open = (name, version, { onUpgradeNeeded } = {}) => {
|
||||||
const request = indexedDB.open(name, version);
|
const request = indexedDB.open(name, version);
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
request.onblocked = () =>
|
request.onblocked = () =>
|
||||||
reject(new Error('Database blocked'));
|
reject(new Error('Database blocked'));
|
||||||
|
|
||||||
request.onupgradeneeded = event =>
|
request.onupgradeneeded = (event) => {
|
||||||
reject(new Error('Unexpected database upgrade required:' +
|
const hasRequestedSpecificVersion = isNumber(version);
|
||||||
` oldVersion: ${event.oldVersion}, newVersion: ${event.newVersion}`));
|
if (!hasRequestedSpecificVersion) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const { newVersion, oldVersion } = event;
|
||||||
|
if (onUpgradeNeeded) {
|
||||||
|
const { transaction } = event.target;
|
||||||
|
onUpgradeNeeded({ oldVersion, transaction });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
reject(new Error('Database upgrade required:' +
|
||||||
|
` oldVersion: ${oldVersion}, newVersion: ${newVersion}`));
|
||||||
|
};
|
||||||
|
|
||||||
request.onerror = event =>
|
request.onerror = event =>
|
||||||
reject(event.target.error);
|
reject(event.target.error);
|
||||||
|
|
|
@ -147,8 +147,15 @@ const database = {
|
||||||
migrations,
|
migrations,
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.run = ({ Backbone } = {}) =>
|
exports.run = ({ Backbone, databaseName } = {}) =>
|
||||||
runMigrations({ Backbone, database });
|
runMigrations({
|
||||||
|
Backbone,
|
||||||
|
database: Object.assign(
|
||||||
|
{},
|
||||||
|
database,
|
||||||
|
isString(databaseName) ? { id: databaseName } : {}
|
||||||
|
),
|
||||||
|
});
|
||||||
|
|
||||||
exports.getDatabase = () => ({
|
exports.getDatabase = () => ({
|
||||||
name: database.id,
|
name: database.id,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue