Skip to content

Commit

Permalink
Release 1.3.3
Browse files Browse the repository at this point in the history
  • Loading branch information
tofumatt committed Jan 27, 2016
1 parent 2f19724 commit f473d39
Show file tree
Hide file tree
Showing 8 changed files with 108 additions and 63 deletions.
3 changes: 2 additions & 1 deletion bower.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,6 @@
"expect": "~0.3.1",
"assert": "~0.1.0",
"modernizr": "~2.8.1"
}
},
"version": "1.3.3"
}
2 changes: 1 addition & 1 deletion component.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "localforage",
"version": "1.3.2",
"version": "1.3.3",
"dependencies": {
"then/promise": "5.0.0"
},
Expand Down
76 changes: 49 additions & 27 deletions dist/localforage.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*!
localForage -- Offline Storage, Improved
Version 1.3.2
Version 1.3.3
https://mozilla.github.io/localForage
(c) 2013-2015 Mozilla, Apache License 2.0
*/
Expand Down Expand Up @@ -1333,23 +1333,61 @@ return /******/ (function(modules) { // webpackBootstrap
return value && value.__local_forage_encoded_blob;
}

// Specialize the default `ready()` function by making it dependant
// Specialize the default `ready()` function by making it dependent
// on the current database operations. Thus, the driver will be actually
// ready when it's been initialized (default) *and* there are no pending
// operations on the database (initiated by some other instances).
function _fullyReady(callback) {
var self = this;

var promise = self._initReady().then(function () {
if (self._dbReady) {
return self._dbReady;
var dbContext = dbContexts[self._dbInfo.name];

if (dbContext && dbContext.dbReady) {
return dbContext.dbReady;
}
});

promise.then(callback, callback);
return promise;
}

function _deferReadiness(dbInfo) {
var dbContext = dbContexts[dbInfo.name];

// Create a deferred object representing the current database operation.
var deferredOperation = {};

deferredOperation.promise = new Promise(function (resolve) {
deferredOperation.resolve = resolve;
});

// Enqueue the deferred operation.
dbContext.deferredOperations.push(deferredOperation);

// Chain its promise to the database readiness.
if (!dbContext.dbReady) {
dbContext.dbReady = deferredOperation.promise;
} else {
dbContext.dbReady = dbContext.dbReady.then(function () {
return deferredOperation.promise;
});
}
}

function _advanceReadiness(dbInfo) {
var dbContext = dbContexts[dbInfo.name];

// Dequeue a deferred operation.
var deferredOperation = dbContext.deferredOperations.pop();

// Resolve its promise (which is part of the database readiness
// chain of promises).
if (deferredOperation) {
deferredOperation.resolve();
}
}

// Open the IndexedDB database (automatically creates one if one didn't
// previously exist), using any options set in the config.
function _initStorage(options) {
Expand Down Expand Up @@ -1379,9 +1417,10 @@ return /******/ (function(modules) { // webpackBootstrap
forages: [],
// Shared database.
db: null,
// States of the database operations.
deferredOperations: {},
operationPromises: []
// Database readiness (promise).
dbReady: null,
// Deferred operations on the database.
deferredOperations: []
};
// Register the new context in the global container.
dbContexts[dbInfo.name] = dbContext;
Expand All @@ -1405,25 +1444,11 @@ return /******/ (function(modules) { // webpackBootstrap
return Promise.resolve();
}

function defer(resolve, reject) {
this.resolve = resolve;
this.reject = reject;
}

for (var j = 0; j < dbContext.forages.length; j++) {
var forage = dbContext.forages[j];
if (forage !== self) {
// Don't wait for itself...
initPromises.push(forage._initReady()['catch'](ignoreErrors));

// Create a deferred object and add it on related localForages
// to make them wait until the database operation required
// by this current instance has finished.
var deferredOperation = {};
deferredOperation.promise = new Promise(defer.bind(deferredOperation));
dbContext.deferredOperations[dbInfo.storeName] = deferredOperation;
dbContext.operationPromises.push(deferredOperation.promise);
forage._dbReady = Promise.all(dbContext.operationPromises);
}
}

Expand Down Expand Up @@ -1468,8 +1493,10 @@ return /******/ (function(modules) { // webpackBootstrap

function _getConnection(dbInfo, upgradeNeeded) {
return new Promise(function (resolve, reject) {

if (dbInfo.db) {
if (upgradeNeeded) {
_deferReadiness(dbInfo);
dbInfo.db.close();
} else {
return resolve(dbInfo.db);
Expand Down Expand Up @@ -1509,12 +1536,7 @@ return /******/ (function(modules) { // webpackBootstrap

openreq.onsuccess = function () {
resolve(openreq.result);
// Resolve the deferred operation, on which other related
// localForage instances depend on to be ready again.
var deferredOperation = dbContexts[dbInfo.name].deferredOperations[dbInfo.storeName];
if (deferredOperation) {
deferredOperation.resolve();
}
_advanceReadiness(dbInfo);
};
});
}
Expand Down
4 changes: 2 additions & 2 deletions dist/localforage.min.js

Large diffs are not rendered by default.

76 changes: 49 additions & 27 deletions dist/localforage.nopromises.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*!
localForage -- Offline Storage, Improved
Version 1.3.2
Version 1.3.3
https://mozilla.github.io/localForage
(c) 2013-2015 Mozilla, Apache License 2.0
*/
Expand Down Expand Up @@ -650,23 +650,61 @@ return /******/ (function(modules) { // webpackBootstrap
return value && value.__local_forage_encoded_blob;
}

// Specialize the default `ready()` function by making it dependant
// Specialize the default `ready()` function by making it dependent
// on the current database operations. Thus, the driver will be actually
// ready when it's been initialized (default) *and* there are no pending
// operations on the database (initiated by some other instances).
function _fullyReady(callback) {
var self = this;

var promise = self._initReady().then(function () {
if (self._dbReady) {
return self._dbReady;
var dbContext = dbContexts[self._dbInfo.name];

if (dbContext && dbContext.dbReady) {
return dbContext.dbReady;
}
});

promise.then(callback, callback);
return promise;
}

function _deferReadiness(dbInfo) {
var dbContext = dbContexts[dbInfo.name];

// Create a deferred object representing the current database operation.
var deferredOperation = {};

deferredOperation.promise = new Promise(function (resolve) {
deferredOperation.resolve = resolve;
});

// Enqueue the deferred operation.
dbContext.deferredOperations.push(deferredOperation);

// Chain its promise to the database readiness.
if (!dbContext.dbReady) {
dbContext.dbReady = deferredOperation.promise;
} else {
dbContext.dbReady = dbContext.dbReady.then(function () {
return deferredOperation.promise;
});
}
}

function _advanceReadiness(dbInfo) {
var dbContext = dbContexts[dbInfo.name];

// Dequeue a deferred operation.
var deferredOperation = dbContext.deferredOperations.pop();

// Resolve its promise (which is part of the database readiness
// chain of promises).
if (deferredOperation) {
deferredOperation.resolve();
}
}

// Open the IndexedDB database (automatically creates one if one didn't
// previously exist), using any options set in the config.
function _initStorage(options) {
Expand Down Expand Up @@ -696,9 +734,10 @@ return /******/ (function(modules) { // webpackBootstrap
forages: [],
// Shared database.
db: null,
// States of the database operations.
deferredOperations: {},
operationPromises: []
// Database readiness (promise).
dbReady: null,
// Deferred operations on the database.
deferredOperations: []
};
// Register the new context in the global container.
dbContexts[dbInfo.name] = dbContext;
Expand All @@ -722,25 +761,11 @@ return /******/ (function(modules) { // webpackBootstrap
return Promise.resolve();
}

function defer(resolve, reject) {
this.resolve = resolve;
this.reject = reject;
}

for (var j = 0; j < dbContext.forages.length; j++) {
var forage = dbContext.forages[j];
if (forage !== self) {
// Don't wait for itself...
initPromises.push(forage._initReady()['catch'](ignoreErrors));

// Create a deferred object and add it on related localForages
// to make them wait until the database operation required
// by this current instance has finished.
var deferredOperation = {};
deferredOperation.promise = new Promise(defer.bind(deferredOperation));
dbContext.deferredOperations[dbInfo.storeName] = deferredOperation;
dbContext.operationPromises.push(deferredOperation.promise);
forage._dbReady = Promise.all(dbContext.operationPromises);
}
}

Expand Down Expand Up @@ -785,8 +810,10 @@ return /******/ (function(modules) { // webpackBootstrap

function _getConnection(dbInfo, upgradeNeeded) {
return new Promise(function (resolve, reject) {

if (dbInfo.db) {
if (upgradeNeeded) {
_deferReadiness(dbInfo);
dbInfo.db.close();
} else {
return resolve(dbInfo.db);
Expand Down Expand Up @@ -826,12 +853,7 @@ return /******/ (function(modules) { // webpackBootstrap

openreq.onsuccess = function () {
resolve(openreq.result);
// Resolve the deferred operation, on which other related
// localForage instances depend on to be ready again.
var deferredOperation = dbContexts[dbInfo.name].deferredOperations[dbInfo.storeName];
if (deferredOperation) {
deferredOperation.resolve();
}
_advanceReadiness(dbInfo);
};
});
}
Expand Down
4 changes: 2 additions & 2 deletions dist/localforage.nopromises.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"storage",
"websql"
],
"version": "1.3.2",
"version": "1.3.3",
"homepage": "https://github.com/mozilla/localForage",
"repository": {
"type": "git",
Expand Down
4 changes: 2 additions & 2 deletions site/localforage.min.js

Large diffs are not rendered by default.

0 comments on commit f473d39

Please sign in to comment.