Socket
Socket
Sign inDemoInstall

localforage

Package Overview
Dependencies
Maintainers
1
Versions
62
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

localforage - npm Package Compare versions

Comparing version 0.1.0 to 0.1.1

test/test.config.coffee

4

bower.json
{
"name": "localforage",
"version": "0.1.0",
"version": "0.1.1",
"main": [

@@ -10,6 +10,4 @@ "dist/localforage.min.js",

".travis.yml",
"build.sh",
"CONTRIBUTING.md",
"LICENSE",
"Makefile",
"test*",

@@ -16,0 +14,0 @@ "vendor/*"

@@ -6,8 +6,18 @@ # About this CHANGELOG

## [Version 0.1.1](https://github.com/mozilla/localForage/releases/tag/0.1.1)
* Added config options to allow users to set their own database names, etc. #100
---
## March 16th, 2014
* [Moved Backbone adapter to its own repository](https://github.com/mozilla/localForage/commit/b7987b3091855379d4908376b668b4b51a6fedfe)
## March 13th, 2014
* [Changed `localforage.driver` to a function instead of the string directly](https://github.com/mozilla/localForage/commit/4941514)
* [Changed `localforage.driver` to a function instead of the string directly](https://github.com/mozilla/localForage/commit/49415145021b0029d2521182de6e338e048fe5b1)
## March 4th, 2014
* [Changed the IndexedDB database name from `asyncStorage` to `localforage`](https://github.com/mozilla/localForage/commit/f4e0156)
* [Changed the IndexedDB database name from `asyncStorage` to `localforage`](https://github.com/mozilla/localForage/commit/f4e0156a29969a79005ac27b303d7e321a720fc6)
/*!
localForage -- Offline Storage, Improved
Version 0.1.0
http://mozilla.github.io/localForage

@@ -791,7 +792,9 @@ (c) 2013-2014 Mozilla, Apache License 2.0

var DBNAME = 'localforage';
var DBVERSION = 1;
var STORENAME = 'keyvaluepairs';
var Promise = window.Promise;
var db = null;
var dbInfo = {
name: 'localforage',
storeName: 'keyvaluepairs',
version: 1
};

@@ -808,5 +811,15 @@ // Initialize IndexedDB; fall back to vendor-prefixed versions if needed.

function _initStorage() {
// Open the IndexedDB database (automatically creates one if one didn't
// previously exist), using any options set in window.localForageConfig.
function _initStorage(options) {
if (options) {
for (var i in dbInfo) {
if (options[i] !== undefined) {
dbInfo[i] = options[i];
}
}
}
return new Promise(function(resolve, reject) {
var openreq = indexedDB.open(DBNAME, DBVERSION);
var openreq = indexedDB.open(dbInfo.name, dbInfo.version);
openreq.onerror = function withStoreOnError() {

@@ -817,7 +830,6 @@ reject(openreq.error.name);

// First time setup: create an empty object store
openreq.result.createObjectStore(STORENAME);
openreq.result.createObjectStore(dbInfo.storeName);
};
openreq.onsuccess = function withStoreOnSuccess() {
db = openreq.result;
resolve();

@@ -831,4 +843,3 @@ };

localforage.ready().then(function() {
var store = db.transaction(STORENAME, 'readonly').objectStore(STORENAME);
var store = db.transaction(dbInfo.storeName, 'readonly').objectStore(dbInfo.storeName);
var req = store.get(key);

@@ -840,3 +851,2 @@ req.onsuccess = function getItemOnSuccess() {

}
if (callback) {

@@ -858,3 +868,3 @@ callback(value);

localforage.ready().then(function() {
var store = db.transaction(STORENAME, 'readwrite').objectStore(STORENAME);
var store = db.transaction(dbInfo.storeName, 'readwrite').objectStore(dbInfo.storeName);

@@ -888,3 +898,3 @@ // Cast to undefined so the value passed to callback/promise is

localforage.ready().then(function() {
var store = db.transaction(STORENAME, 'readwrite').objectStore(STORENAME);
var store = db.transaction(dbInfo.storeName, 'readwrite').objectStore(dbInfo.storeName);

@@ -905,3 +915,2 @@ // We use `['delete']` instead of `.delete` because IE 8 will

}
resolve();

@@ -919,4 +928,3 @@ };

localforage.ready().then(function() {
var store = db.transaction(STORENAME, 'readwrite').objectStore(STORENAME);
var store = db.transaction(dbInfo.storeName, 'readwrite').objectStore(dbInfo.storeName);
var req = store.clear();

@@ -940,4 +948,3 @@ req.onsuccess = function clearOnSuccess() {

localforage.ready().then(function() {
var store = db.transaction(STORENAME, 'readonly').objectStore(STORENAME);
var store = db.transaction(dbInfo.storeName, 'readonly').objectStore(dbInfo.storeName);
var req = store.count();

@@ -971,3 +978,3 @@ req.onsuccess = function lengthOnSuccess() {

localforage.ready().then(function() {
var store = db.transaction(STORENAME, 'readonly').objectStore(STORENAME);
var store = db.transaction(dbInfo.storeName, 'readonly').objectStore(dbInfo.storeName);

@@ -1046,2 +1053,6 @@ var advanced = false;

var keyPrefix = '';
var dbInfo = {
name: 'localforage'
};
var Promise = window.Promise;

@@ -1063,3 +1074,15 @@ var localStorage = null;

function _initStorage() {
// Config the localStorage backend, using options set in
// window.localForageConfig.
function _initStorage(options) {
if (options) {
for (var i in dbInfo) {
if (options[i] !== undefined) {
dbInfo[i] = options[i];
}
}
}
keyPrefix = dbInfo.name + '/';
return Promise.resolve();

@@ -1091,3 +1114,3 @@ }

try {
var result = localStorage.getItem(key);
var result = localStorage.getItem(keyPrefix + key);

@@ -1119,6 +1142,10 @@ // If a result was found, parse it from serialized JSON into a

// Remove the prefix from the key, if a key is found.
if (result) {
result = result.substring(keyPrefix.length);
}
if (callback) {
callback(result);
}
resolve(result);

@@ -1148,3 +1175,3 @@ });

localforage.ready().then(function() {
localStorage.removeItem(key);
localStorage.removeItem(keyPrefix + key);

@@ -1182,3 +1209,3 @@ if (callback) {

localStorage.setItem(key, value);
localStorage.setItem(keyPrefix + key, value);

@@ -1219,3 +1246,2 @@ if (callback) {

var DB_NAME = 'localforage';
// Default DB size is _JUST UNDER_ 5MB, as it's the highest size we can use

@@ -1226,8 +1252,12 @@ // without a prompt.

var DB_SIZE = 4980736;
var DB_VERSION = '1.0';
var SERIALIZED_MARKER = '__lfsc__:';
var SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length;
var STORE_NAME = 'keyvaluepairs';
var Promise = window.Promise;
var db = null;
var dbInfo = {
description: '',
name: 'localforage',
storeName: 'keyvaluepairs',
version: '1.0'
};

@@ -1239,14 +1269,22 @@ // If WebSQL methods aren't available, we can stop now.

function _initStorage() {
// Open the WebSQL database (automatically creates one if one didn't
// previously exist), using any options set in window.localForageConfig.
function _initStorage(options) {
if (options) {
for (var i in dbInfo) {
if (options[i] !== undefined) {
dbInfo[i] = typeof(options[i]) !== 'string' ? options[i].toString() : options[i];
}
}
}
return new Promise(function(resolve, reject) {
// Open the database; the openDatabase API will automatically create it for
// us if it doesn't exist.
db = window.openDatabase(DB_NAME, DB_VERSION, STORE_NAME, DB_SIZE);
// Open the database; the openDatabase API will automatically
// create it for us if it doesn't exist.
db = window.openDatabase(dbInfo.name, dbInfo.version,
dbInfo.description, DB_SIZE);
// Create our key/value table if it doesn't exist.
// TODO: Technically I can imagine this being as race condition, as I'm not
// positive on the WebSQL API enough to be sure that other transactions
// won't be run before this? But I assume not.
db.transaction(function (t) {
t.executeSql('CREATE TABLE IF NOT EXISTS localforage (id INTEGER PRIMARY KEY, key unique, value)', [], function(t, results) {
t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' (id INTEGER PRIMARY KEY, key unique, value)', [], function() {
resolve();

@@ -1262,3 +1300,3 @@ }, null);

db.transaction(function (t) {
t.executeSql('SELECT * FROM localforage WHERE key = ? LIMIT 1', [key], function (t, results) {
t.executeSql('SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) {
var result = results.rows.length ? results.rows.item(0).value : null;

@@ -1311,3 +1349,3 @@

db.transaction(function (t) {
t.executeSql('INSERT OR REPLACE INTO localforage (key, value) VALUES (?, ?)', [key, valueToSave], function() {
t.executeSql('INSERT OR REPLACE INTO ' + dbInfo.storeName + ' (key, value) VALUES (?, ?)', [key, valueToSave], function() {
if (callback) {

@@ -1328,3 +1366,3 @@ callback(value);

db.transaction(function (t) {
t.executeSql('DELETE FROM localforage WHERE key = ?', [key], function() {
t.executeSql('DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function() {
if (callback) {

@@ -1347,3 +1385,3 @@ callback();

db.transaction(function (t) {
t.executeSql('DELETE FROM localforage', [], function(t, results) {
t.executeSql('DELETE FROM ' + dbInfo.storeName, [], function(t, results) {
if (callback) {

@@ -1367,3 +1405,3 @@ callback();

// Ahhh, SQL makes this one soooooo easy.
t.executeSql('SELECT COUNT(key) as c FROM localforage', [], function (t, results) {
t.executeSql('SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) {
var result = results.rows.item(0).c;

@@ -1393,3 +1431,3 @@

db.transaction(function (t) {
t.executeSql('SELECT key FROM localforage WHERE id = ? LIMIT 1', [n + 1], function (t, results) {
t.executeSql('SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) {
var result = results.rows.length ? results.rows.item(0).key : null;

@@ -1490,3 +1528,3 @@

localForage._initStorage().then(function() {
localForage._initStorage(window.localForageConfig).then(function() {
if (callback) {

@@ -1514,3 +1552,3 @@ callback(localForage);

localForage._initStorage().then(function() {
localForage._initStorage(window.localForageConfig).then(function() {
if (callback) {

@@ -1525,3 +1563,3 @@ callback(localForage);

localForage._initStorage().then(function() {
localForage._initStorage(window.localForageConfig).then(function() {
if (callback) {

@@ -1528,0 +1566,0 @@ callback(localForage);

@@ -1,1 +0,1 @@

!function(){var a,b,c,d;!function(){var e={},f={};a=function(a,b,c){e[a]={deps:b,callback:c}},d=c=b=function(a){function c(b){if("."!==b.charAt(0))return b;for(var c=b.split("/"),d=a.split("/").slice(0,-1),e=0,f=c.length;f>e;e++){var g=c[e];if(".."===g)d.pop();else{if("."===g)continue;d.push(g)}}return d.join("/")}if(d._eak_seen=e,f[a])return f[a];if(f[a]={},!e[a])throw new Error("Could not find module "+a);for(var g,h=e[a],i=h.deps,j=h.callback,k=[],l=0,m=i.length;m>l;l++)k.push("exports"===i[l]?g={}:b(c(i[l])));var n=j.apply(this,k);return f[a]=g||n}}(),a("promise/all",["./utils","exports"],function(a,b){"use strict";function c(a){var b=this;if(!d(a))throw new TypeError("You must pass an array to all.");return new b(function(b,c){function d(a){return function(b){f(a,b)}}function f(a,c){h[a]=c,0===--i&&b(h)}var g,h=[],i=a.length;0===i&&b([]);for(var j=0;j<a.length;j++)g=a[j],g&&e(g.then)?g.then(d(j),c):f(j,g)})}var d=a.isArray,e=a.isFunction;b.all=c}),a("promise/asap",["exports"],function(a){"use strict";function b(){return function(){process.nextTick(e)}}function c(){var a=0,b=new i(e),c=document.createTextNode("");return b.observe(c,{characterData:!0}),function(){c.data=a=++a%2}}function d(){return function(){j.setTimeout(e,1)}}function e(){for(var a=0;a<k.length;a++){var b=k[a],c=b[0],d=b[1];c(d)}k=[]}function f(a,b){var c=k.push([a,b]);1===c&&g()}var g,h="undefined"!=typeof window?window:{},i=h.MutationObserver||h.WebKitMutationObserver,j="undefined"!=typeof global?global:this,k=[];g="undefined"!=typeof process&&"[object process]"==={}.toString.call(process)?b():i?c():d(),a.asap=f}),a("promise/cast",["exports"],function(a){"use strict";function b(a){if(a&&"object"==typeof a&&a.constructor===this)return a;var b=this;return new b(function(b){b(a)})}a.cast=b}),a("promise/config",["exports"],function(a){"use strict";function b(a,b){return 2!==arguments.length?c[a]:void(c[a]=b)}var c={instrument:!1};a.config=c,a.configure=b}),a("promise/polyfill",["./promise","./utils","exports"],function(a,b,c){"use strict";function d(){var a="Promise"in window&&"cast"in window.Promise&&"resolve"in window.Promise&&"reject"in window.Promise&&"all"in window.Promise&&"race"in window.Promise&&function(){var a;return new window.Promise(function(b){a=b}),f(a)}();a||(window.Promise=e)}var e=a.Promise,f=b.isFunction;c.polyfill=d}),a("promise/promise",["./config","./utils","./cast","./all","./race","./resolve","./reject","./asap","exports"],function(a,b,c,d,e,f,g,h,i){"use strict";function j(a){if(!w(a))throw new TypeError("You must pass a resolver function as the first argument to the promise constructor");if(!(this instanceof j))throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.");this._subscribers=[],k(a,this)}function k(a,b){function c(a){p(b,a)}function d(a){r(b,a)}try{a(c,d)}catch(e){d(e)}}function l(a,b,c,d){var e,f,g,h,i=w(c);if(i)try{e=c(d),g=!0}catch(j){h=!0,f=j}else e=d,g=!0;o(b,e)||(i&&g?p(b,e):h?r(b,f):a===F?p(b,e):a===G&&r(b,e))}function m(a,b,c,d){var e=a._subscribers,f=e.length;e[f]=b,e[f+F]=c,e[f+G]=d}function n(a,b){for(var c,d,e=a._subscribers,f=a._detail,g=0;g<e.length;g+=3)c=e[g],d=e[g+b],l(b,c,d,f);a._subscribers=null}function o(a,b){var c,d=null;try{if(a===b)throw new TypeError("A promises callback cannot return that same promise.");if(v(b)&&(d=b.then,w(d)))return d.call(b,function(d){return c?!0:(c=!0,void(b!==d?p(a,d):q(a,d)))},function(b){return c?!0:(c=!0,void r(a,b))}),!0}catch(e){return c?!0:(r(a,e),!0)}return!1}function p(a,b){a===b?q(a,b):o(a,b)||q(a,b)}function q(a,b){a._state===D&&(a._state=E,a._detail=b,u.async(s,a))}function r(a,b){a._state===D&&(a._state=E,a._detail=b,u.async(t,a))}function s(a){n(a,a._state=F)}function t(a){n(a,a._state=G)}var u=a.config,v=(a.configure,b.objectOrFunction),w=b.isFunction,x=(b.now,c.cast),y=d.all,z=e.race,A=f.resolve,B=g.reject,C=h.asap;u.async=C;var D=void 0,E=0,F=1,G=2;j.prototype={constructor:j,_state:void 0,_detail:void 0,_subscribers:void 0,then:function(a,b){var c=this,d=new this.constructor(function(){});if(this._state){var e=arguments;u.async(function(){l(c._state,d,e[c._state-1],c._detail)})}else m(this,d,a,b);return d},"catch":function(a){return this.then(null,a)}},j.all=y,j.cast=x,j.race=z,j.resolve=A,j.reject=B,i.Promise=j}),a("promise/race",["./utils","exports"],function(a,b){"use strict";function c(a){var b=this;if(!d(a))throw new TypeError("You must pass an array to race.");return new b(function(b,c){for(var d,e=0;e<a.length;e++)d=a[e],d&&"function"==typeof d.then?d.then(b,c):b(d)})}var d=a.isArray;b.race=c}),a("promise/reject",["exports"],function(a){"use strict";function b(a){var b=this;return new b(function(b,c){c(a)})}a.reject=b}),a("promise/resolve",["exports"],function(a){"use strict";function b(a){var b=this;return new b(function(b){b(a)})}a.resolve=b}),a("promise/utils",["exports"],function(a){"use strict";function b(a){return c(a)||"object"==typeof a&&null!==a}function c(a){return"function"==typeof a}function d(a){return"[object Array]"===Object.prototype.toString.call(a)}var e=Date.now||function(){return(new Date).getTime()};a.objectOrFunction=b,a.isFunction=c,a.isArray=d,a.now=e}),b("promise/polyfill").polyfill()}(),function(){"use strict";function a(){return new k(function(a,b){var c=m.open(h,i);c.onerror=function(){b(c.error.name)},c.onupgradeneeded=function(){c.result.createObjectStore(j)},c.onsuccess=function(){l=c.result,a()}})}function b(a,b){return new k(function(c,d){localforage.ready().then(function(){var e=l.transaction(j,"readonly").objectStore(j),f=e.get(a);f.onsuccess=function(){var a=f.result;void 0===a&&(a=null),b&&b(a),c(a)},f.onerror=function(){d(f.error.name)}})})}function c(a,b,c){return new k(function(d,e){localforage.ready().then(function(){var f=l.transaction(j,"readwrite").objectStore(j);void 0===b&&(b=null);var g=f.put(b,a);g.onsuccess=function(){c&&c(b),d(b)},g.onerror=function(){e(g.error.name)}})})}function d(a,b){return new k(function(c,d){localforage.ready().then(function(){var e=l.transaction(j,"readwrite").objectStore(j),f=e["delete"](a);f.onsuccess=function(){b&&b(),c()},f.onerror=function(){d(f.error.name)}})})}function e(a){return new k(function(b,c){localforage.ready().then(function(){var d=l.transaction(j,"readwrite").objectStore(j),e=d.clear();e.onsuccess=function(){a&&a(),b()},e.onerror=function(){c(e.error.name)}})})}function f(a){return new k(function(b,c){localforage.ready().then(function(){var d=l.transaction(j,"readonly").objectStore(j),e=d.count();e.onsuccess=function(){a&&a(e.result),b(e.result)},e.onerror=function(){c(e.error.name)}})})}function g(a,b){return new k(function(c,d){return 0>a?(b&&b(null),void c(null)):void localforage.ready().then(function(){var e=l.transaction(j,"readonly").objectStore(j),f=!1,g=e.openCursor();g.onsuccess=function(){var d=g.result;return d?void(0===a?(b&&b(d.key),c(d.key)):f?(b&&b(d.key),c(d.key)):(f=!0,d.advance(a))):(b&&b(null),void c(null))},g.onerror=function(){d(g.error.name)}})})}var h="localforage",i=1,j="keyvaluepairs",k=window.Promise,l=null,m=m||window.indexedDB||window.webkitIndexedDB||window.mozIndexedDB||window.OIndexedDB||window.msIndexedDB;if(m){var n={_driver:"asyncStorage",_initStorage:a,getItem:b,setItem:c,removeItem:d,clear:e,length:f,key:g};"function"==typeof define&&define.amd?define("asyncStorage",function(){return n}):"undefined"!=typeof module&&module.exports?module.exports=n:this.asyncStorage=n}}.call(this),function(){"use strict";function a(){return h.resolve()}function b(a){return new h(function(b){localforage.ready().then(function(){i.clear(),a&&a(),b()})})}function c(a,b){return new h(function(c,d){localforage.ready().then(function(){try{var e=i.getItem(a);e&&(e=JSON.parse(e)),b&&b(e),c(e)}catch(f){d(f)}})})}function d(a,b){return new h(function(c){localforage.ready().then(function(){var d=i.key(a);b&&b(d),c(d)})})}function e(a){return new h(function(b){localforage.ready().then(function(){var c=i.length;a&&a(c),b(c)})})}function f(a,b){return new h(function(c){localforage.ready().then(function(){i.removeItem(a),b&&b(),c()})})}function g(a,b,c){return new h(function(d,e){localforage.ready().then(function(){void 0===b&&(b=null);var f=b;try{b=JSON.stringify(b)}catch(g){e(g)}i.setItem(a,b),c&&c(f),d(f)})})}var h=window.Promise,i=null;try{i=window.localStorage}catch(j){return}var k={_driver:"localStorageWrapper",_initStorage:a,getItem:c,setItem:g,removeItem:f,clear:b,length:e,key:d};"function"==typeof define&&define.amd?define("localStorageWrapper",function(){return k}):"undefined"!=typeof module&&module.exports?module.exports=k:this.localStorageWrapper=k}.call(this),function(){"use strict";function a(){return new n(function(a){o=window.openDatabase(h,j,m,i),o.transaction(function(b){b.executeSql("CREATE TABLE IF NOT EXISTS localforage (id INTEGER PRIMARY KEY, key unique, value)",[],function(){a()},null)})})}function b(a,b){return new n(function(c,d){localforage.ready().then(function(){o.transaction(function(e){e.executeSql("SELECT * FROM localforage WHERE key = ? LIMIT 1",[a],function(a,e){var f=e.rows.length?e.rows.item(0).value:null;if(f&&f.substr(0,l)===k)try{f=JSON.parse(f.slice(l))}catch(g){d(g)}b&&b(f),c(f)},null)})})})}function c(a,b,c){return new n(function(d){localforage.ready().then(function(){void 0===b&&(b=null);var e;e="boolean"==typeof b||"number"==typeof b||"object"==typeof b?k+JSON.stringify(b):b,o.transaction(function(f){f.executeSql("INSERT OR REPLACE INTO localforage (key, value) VALUES (?, ?)",[a,e],function(){c&&c(b),d(b)},null)})})})}function d(a,b){return new n(function(c){localforage.ready().then(function(){o.transaction(function(d){d.executeSql("DELETE FROM localforage WHERE key = ?",[a],function(){b&&b(),c()},null)})})})}function e(a){return new n(function(b){localforage.ready().then(function(){o.transaction(function(c){c.executeSql("DELETE FROM localforage",[],function(){a&&a(),b()},null)})})})}function f(a){return new n(function(b){localforage.ready().then(function(){o.transaction(function(c){c.executeSql("SELECT COUNT(key) as c FROM localforage",[],function(c,d){var e=d.rows.item(0).c;a&&a(e),b(e)},null)})})})}function g(a,b){return new n(function(c){localforage.ready().then(function(){o.transaction(function(d){d.executeSql("SELECT key FROM localforage WHERE id = ? LIMIT 1",[a+1],function(a,d){var e=d.rows.length?d.rows.item(0).key:null;b&&b(e),c(e)},null)})})})}var h="localforage",i=4980736,j="1.0",k="__lfsc__:",l=k.length,m="keyvaluepairs",n=window.Promise,o=null;if(window.openDatabase){var p={_driver:"webSQLStorage",_initStorage:a,getItem:b,setItem:c,removeItem:d,clear:e,length:f,key:g};"function"==typeof define&&define.amd?define("webSQLStorage",function(){return p}):"undefined"!=typeof module&&module.exports?module.exports=p:this.webSQLStorage=p}}.call(this),function(){"use strict";var a=window.Promise,b=1,c=2,d=3,e=d;"function"==typeof define&&define.amd?e=b:"undefined"!=typeof module&&module.exports&&(e=c);var f,g=g||window.indexedDB||window.webkitIndexedDB||window.mozIndexedDB||window.OIndexedDB||window.msIndexedDB,h=this,i={INDEXEDDB:"asyncStorage",LOCALSTORAGE:"localStorageWrapper",WEBSQL:"webSQLStorage",driver:function(){return i._driver||null},_ready:a.reject(new Error("setDriver() wasn't called")),setDriver:function(d,f){return this._ready=new a(function(a,j){if(!g&&d===i.INDEXEDDB||!window.openDatabase&&d===i.WEBSQL)return f&&f(i),void j(i);if(e===b)require([d],function(b){i._extend(b),i._initStorage().then(function(){f&&f(i),a(i)})});else if(e===c){var k;switch(d){case i.INDEXEDDB:k=require("localforage/src/drivers/indexeddb");break;case i.LOCALSTORAGE:k=require("localforage/src/drivers/localstorage");break;case i.WEBSQL:k=require("localforage/src/drivers/websql")}i._extend(k),i._initStorage().then(function(){f&&f(i),a(i)})}else i._extend(h[d]),i._initStorage().then(function(){f&&f(i),a(i)})}),i._ready},ready:function(){return this._ready},_extend:function(a){for(var b in a)a.hasOwnProperty(b)&&(this[b]=a[b])}};f=g?i.INDEXEDDB:window.openDatabase?i.WEBSQL:i.LOCALSTORAGE,i.setDriver(f),e===b?define(function(){return i}):e===c?module.exports=i:this.localforage=i}.call(this);
!function(){var a,b,c,d;!function(){var e={},f={};a=function(a,b,c){e[a]={deps:b,callback:c}},d=c=b=function(a){function c(b){if("."!==b.charAt(0))return b;for(var c=b.split("/"),d=a.split("/").slice(0,-1),e=0,f=c.length;f>e;e++){var g=c[e];if(".."===g)d.pop();else{if("."===g)continue;d.push(g)}}return d.join("/")}if(d._eak_seen=e,f[a])return f[a];if(f[a]={},!e[a])throw new Error("Could not find module "+a);for(var g,h=e[a],i=h.deps,j=h.callback,k=[],l=0,m=i.length;m>l;l++)k.push("exports"===i[l]?g={}:b(c(i[l])));var n=j.apply(this,k);return f[a]=g||n}}(),a("promise/all",["./utils","exports"],function(a,b){"use strict";function c(a){var b=this;if(!d(a))throw new TypeError("You must pass an array to all.");return new b(function(b,c){function d(a){return function(b){f(a,b)}}function f(a,c){h[a]=c,0===--i&&b(h)}var g,h=[],i=a.length;0===i&&b([]);for(var j=0;j<a.length;j++)g=a[j],g&&e(g.then)?g.then(d(j),c):f(j,g)})}var d=a.isArray,e=a.isFunction;b.all=c}),a("promise/asap",["exports"],function(a){"use strict";function b(){return function(){process.nextTick(e)}}function c(){var a=0,b=new i(e),c=document.createTextNode("");return b.observe(c,{characterData:!0}),function(){c.data=a=++a%2}}function d(){return function(){j.setTimeout(e,1)}}function e(){for(var a=0;a<k.length;a++){var b=k[a],c=b[0],d=b[1];c(d)}k=[]}function f(a,b){var c=k.push([a,b]);1===c&&g()}var g,h="undefined"!=typeof window?window:{},i=h.MutationObserver||h.WebKitMutationObserver,j="undefined"!=typeof global?global:this,k=[];g="undefined"!=typeof process&&"[object process]"==={}.toString.call(process)?b():i?c():d(),a.asap=f}),a("promise/cast",["exports"],function(a){"use strict";function b(a){if(a&&"object"==typeof a&&a.constructor===this)return a;var b=this;return new b(function(b){b(a)})}a.cast=b}),a("promise/config",["exports"],function(a){"use strict";function b(a,b){return 2!==arguments.length?c[a]:void(c[a]=b)}var c={instrument:!1};a.config=c,a.configure=b}),a("promise/polyfill",["./promise","./utils","exports"],function(a,b,c){"use strict";function d(){var a="Promise"in window&&"cast"in window.Promise&&"resolve"in window.Promise&&"reject"in window.Promise&&"all"in window.Promise&&"race"in window.Promise&&function(){var a;return new window.Promise(function(b){a=b}),f(a)}();a||(window.Promise=e)}var e=a.Promise,f=b.isFunction;c.polyfill=d}),a("promise/promise",["./config","./utils","./cast","./all","./race","./resolve","./reject","./asap","exports"],function(a,b,c,d,e,f,g,h,i){"use strict";function j(a){if(!w(a))throw new TypeError("You must pass a resolver function as the first argument to the promise constructor");if(!(this instanceof j))throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.");this._subscribers=[],k(a,this)}function k(a,b){function c(a){p(b,a)}function d(a){r(b,a)}try{a(c,d)}catch(e){d(e)}}function l(a,b,c,d){var e,f,g,h,i=w(c);if(i)try{e=c(d),g=!0}catch(j){h=!0,f=j}else e=d,g=!0;o(b,e)||(i&&g?p(b,e):h?r(b,f):a===F?p(b,e):a===G&&r(b,e))}function m(a,b,c,d){var e=a._subscribers,f=e.length;e[f]=b,e[f+F]=c,e[f+G]=d}function n(a,b){for(var c,d,e=a._subscribers,f=a._detail,g=0;g<e.length;g+=3)c=e[g],d=e[g+b],l(b,c,d,f);a._subscribers=null}function o(a,b){var c,d=null;try{if(a===b)throw new TypeError("A promises callback cannot return that same promise.");if(v(b)&&(d=b.then,w(d)))return d.call(b,function(d){return c?!0:(c=!0,void(b!==d?p(a,d):q(a,d)))},function(b){return c?!0:(c=!0,void r(a,b))}),!0}catch(e){return c?!0:(r(a,e),!0)}return!1}function p(a,b){a===b?q(a,b):o(a,b)||q(a,b)}function q(a,b){a._state===D&&(a._state=E,a._detail=b,u.async(s,a))}function r(a,b){a._state===D&&(a._state=E,a._detail=b,u.async(t,a))}function s(a){n(a,a._state=F)}function t(a){n(a,a._state=G)}var u=a.config,v=(a.configure,b.objectOrFunction),w=b.isFunction,x=(b.now,c.cast),y=d.all,z=e.race,A=f.resolve,B=g.reject,C=h.asap;u.async=C;var D=void 0,E=0,F=1,G=2;j.prototype={constructor:j,_state:void 0,_detail:void 0,_subscribers:void 0,then:function(a,b){var c=this,d=new this.constructor(function(){});if(this._state){var e=arguments;u.async(function(){l(c._state,d,e[c._state-1],c._detail)})}else m(this,d,a,b);return d},"catch":function(a){return this.then(null,a)}},j.all=y,j.cast=x,j.race=z,j.resolve=A,j.reject=B,i.Promise=j}),a("promise/race",["./utils","exports"],function(a,b){"use strict";function c(a){var b=this;if(!d(a))throw new TypeError("You must pass an array to race.");return new b(function(b,c){for(var d,e=0;e<a.length;e++)d=a[e],d&&"function"==typeof d.then?d.then(b,c):b(d)})}var d=a.isArray;b.race=c}),a("promise/reject",["exports"],function(a){"use strict";function b(a){var b=this;return new b(function(b,c){c(a)})}a.reject=b}),a("promise/resolve",["exports"],function(a){"use strict";function b(a){var b=this;return new b(function(b){b(a)})}a.resolve=b}),a("promise/utils",["exports"],function(a){"use strict";function b(a){return c(a)||"object"==typeof a&&null!==a}function c(a){return"function"==typeof a}function d(a){return"[object Array]"===Object.prototype.toString.call(a)}var e=Date.now||function(){return(new Date).getTime()};a.objectOrFunction=b,a.isFunction=c,a.isArray=d,a.now=e}),b("promise/polyfill").polyfill()}(),function(){"use strict";function a(a){if(a)for(var b in j)void 0!==a[b]&&(j[b]=a[b]);return new h(function(a,b){var c=k.open(j.name,j.version);c.onerror=function(){b(c.error.name)},c.onupgradeneeded=function(){c.result.createObjectStore(j.storeName)},c.onsuccess=function(){i=c.result,a()}})}function b(a,b){return new h(function(c,d){localforage.ready().then(function(){var e=i.transaction(j.storeName,"readonly").objectStore(j.storeName),f=e.get(a);f.onsuccess=function(){var a=f.result;void 0===a&&(a=null),b&&b(a),c(a)},f.onerror=function(){d(f.error.name)}})})}function c(a,b,c){return new h(function(d,e){localforage.ready().then(function(){var f=i.transaction(j.storeName,"readwrite").objectStore(j.storeName);void 0===b&&(b=null);var g=f.put(b,a);g.onsuccess=function(){c&&c(b),d(b)},g.onerror=function(){e(g.error.name)}})})}function d(a,b){return new h(function(c,d){localforage.ready().then(function(){var e=i.transaction(j.storeName,"readwrite").objectStore(j.storeName),f=e["delete"](a);f.onsuccess=function(){b&&b(),c()},f.onerror=function(){d(f.error.name)}})})}function e(a){return new h(function(b,c){localforage.ready().then(function(){var d=i.transaction(j.storeName,"readwrite").objectStore(j.storeName),e=d.clear();e.onsuccess=function(){a&&a(),b()},e.onerror=function(){c(e.error.name)}})})}function f(a){return new h(function(b,c){localforage.ready().then(function(){var d=i.transaction(j.storeName,"readonly").objectStore(j.storeName),e=d.count();e.onsuccess=function(){a&&a(e.result),b(e.result)},e.onerror=function(){c(e.error.name)}})})}function g(a,b){return new h(function(c,d){return 0>a?(b&&b(null),void c(null)):void localforage.ready().then(function(){var e=i.transaction(j.storeName,"readonly").objectStore(j.storeName),f=!1,g=e.openCursor();g.onsuccess=function(){var d=g.result;return d?void(0===a?(b&&b(d.key),c(d.key)):f?(b&&b(d.key),c(d.key)):(f=!0,d.advance(a))):(b&&b(null),void c(null))},g.onerror=function(){d(g.error.name)}})})}var h=window.Promise,i=null,j={name:"localforage",storeName:"keyvaluepairs",version:1},k=k||window.indexedDB||window.webkitIndexedDB||window.mozIndexedDB||window.OIndexedDB||window.msIndexedDB;if(k){var l={_driver:"asyncStorage",_initStorage:a,getItem:b,setItem:c,removeItem:d,clear:e,length:f,key:g};"function"==typeof define&&define.amd?define("asyncStorage",function(){return l}):"undefined"!=typeof module&&module.exports?module.exports=l:this.asyncStorage=l}}.call(this),function(){"use strict";function a(a){if(a)for(var b in i)void 0!==a[b]&&(i[b]=a[b]);return h=i.name+"/",j.resolve()}function b(a){return new j(function(b){localforage.ready().then(function(){k.clear(),a&&a(),b()})})}function c(a,b){return new j(function(c,d){localforage.ready().then(function(){try{var e=k.getItem(h+a);e&&(e=JSON.parse(e)),b&&b(e),c(e)}catch(f){d(f)}})})}function d(a,b){return new j(function(c){localforage.ready().then(function(){var d=k.key(a);d&&(d=d.substring(h.length)),b&&b(d),c(d)})})}function e(a){return new j(function(b){localforage.ready().then(function(){var c=k.length;a&&a(c),b(c)})})}function f(a,b){return new j(function(c){localforage.ready().then(function(){k.removeItem(h+a),b&&b(),c()})})}function g(a,b,c){return new j(function(d,e){localforage.ready().then(function(){void 0===b&&(b=null);var f=b;try{b=JSON.stringify(b)}catch(g){e(g)}k.setItem(h+a,b),c&&c(f),d(f)})})}var h="",i={name:"localforage"},j=window.Promise,k=null;try{k=window.localStorage}catch(l){return}var m={_driver:"localStorageWrapper",_initStorage:a,getItem:c,setItem:g,removeItem:f,clear:b,length:e,key:d};"function"==typeof define&&define.amd?define("localStorageWrapper",function(){return m}):"undefined"!=typeof module&&module.exports?module.exports=m:this.localStorageWrapper=m}.call(this),function(){"use strict";function a(a){if(a)for(var b in m)void 0!==a[b]&&(m[b]="string"!=typeof a[b]?a[b].toString():a[b]);return new k(function(a){l=window.openDatabase(m.name,m.version,m.description,h),l.transaction(function(b){b.executeSql("CREATE TABLE IF NOT EXISTS "+m.storeName+" (id INTEGER PRIMARY KEY, key unique, value)",[],function(){a()},null)})})}function b(a,b){return new k(function(c,d){localforage.ready().then(function(){l.transaction(function(e){e.executeSql("SELECT * FROM "+m.storeName+" WHERE key = ? LIMIT 1",[a],function(a,e){var f=e.rows.length?e.rows.item(0).value:null;if(f&&f.substr(0,j)===i)try{f=JSON.parse(f.slice(j))}catch(g){d(g)}b&&b(f),c(f)},null)})})})}function c(a,b,c){return new k(function(d){localforage.ready().then(function(){void 0===b&&(b=null);var e;e="boolean"==typeof b||"number"==typeof b||"object"==typeof b?i+JSON.stringify(b):b,l.transaction(function(f){f.executeSql("INSERT OR REPLACE INTO "+m.storeName+" (key, value) VALUES (?, ?)",[a,e],function(){c&&c(b),d(b)},null)})})})}function d(a,b){return new k(function(c){localforage.ready().then(function(){l.transaction(function(d){d.executeSql("DELETE FROM "+m.storeName+" WHERE key = ?",[a],function(){b&&b(),c()},null)})})})}function e(a){return new k(function(b){localforage.ready().then(function(){l.transaction(function(c){c.executeSql("DELETE FROM "+m.storeName,[],function(){a&&a(),b()},null)})})})}function f(a){return new k(function(b){localforage.ready().then(function(){l.transaction(function(c){c.executeSql("SELECT COUNT(key) as c FROM "+m.storeName,[],function(c,d){var e=d.rows.item(0).c;a&&a(e),b(e)},null)})})})}function g(a,b){return new k(function(c){localforage.ready().then(function(){l.transaction(function(d){d.executeSql("SELECT key FROM "+m.storeName+" WHERE id = ? LIMIT 1",[a+1],function(a,d){var e=d.rows.length?d.rows.item(0).key:null;b&&b(e),c(e)},null)})})})}var h=4980736,i="__lfsc__:",j=i.length,k=window.Promise,l=null,m={description:"",name:"localforage",storeName:"keyvaluepairs",version:"1.0"};if(window.openDatabase){var n={_driver:"webSQLStorage",_initStorage:a,getItem:b,setItem:c,removeItem:d,clear:e,length:f,key:g};"function"==typeof define&&define.amd?define("webSQLStorage",function(){return n}):"undefined"!=typeof module&&module.exports?module.exports=n:this.webSQLStorage=n}}.call(this),function(){"use strict";var a=window.Promise,b=1,c=2,d=3,e=d;"function"==typeof define&&define.amd?e=b:"undefined"!=typeof module&&module.exports&&(e=c);var f,g=g||window.indexedDB||window.webkitIndexedDB||window.mozIndexedDB||window.OIndexedDB||window.msIndexedDB,h=this,i={INDEXEDDB:"asyncStorage",LOCALSTORAGE:"localStorageWrapper",WEBSQL:"webSQLStorage",driver:function(){return i._driver||null},_ready:a.reject(new Error("setDriver() wasn't called")),setDriver:function(d,f){return this._ready=new a(function(a,j){if(!g&&d===i.INDEXEDDB||!window.openDatabase&&d===i.WEBSQL)return f&&f(i),void j(i);if(e===b)require([d],function(b){i._extend(b),i._initStorage(window.localForageConfig).then(function(){f&&f(i),a(i)})});else if(e===c){var k;switch(d){case i.INDEXEDDB:k=require("localforage/src/drivers/indexeddb");break;case i.LOCALSTORAGE:k=require("localforage/src/drivers/localstorage");break;case i.WEBSQL:k=require("localforage/src/drivers/websql")}i._extend(k),i._initStorage(window.localForageConfig).then(function(){f&&f(i),a(i)})}else i._extend(h[d]),i._initStorage(window.localForageConfig).then(function(){f&&f(i),a(i)})}),i._ready},ready:function(){return this._ready},_extend:function(a){for(var b in a)a.hasOwnProperty(b)&&(this[b]=a[b])}};f=g?i.INDEXEDDB:window.openDatabase?i.WEBSQL:i.LOCALSTORAGE,i.setDriver(f),e===b?define(function(){return i}):e===c?module.exports=i:this.localforage=i}.call(this);

@@ -78,8 +78,2 @@ /*global exports:true, require:true */

}
},
backbone: {
src: [
'src/adapters/backbone.js'
],
dest: 'dist/backbone.localforage.js',
}

@@ -92,7 +86,2 @@ },

}
},
backbone: {
files: {
'dist/backbone.localforage.min.js': ['dist/backbone.localforage.js']
}
}

@@ -99,0 +88,0 @@ },

@@ -11,3 +11,3 @@ {

],
"version": "0.1.0",
"version": "0.1.1",
"homepage": "https://github.com/mozilla/localForage",

@@ -14,0 +14,0 @@ "repository": {

@@ -130,12 +130,31 @@ # localForage [![Build Status](https://secure.travis-ci.org/mozilla/localForage.png?branch=master)](http://travis-ci.org/mozilla/localForage)

## Backbone.js
## Configuration
localForage includes a [Backbone.js](http://backbonejs.org/) storage library
that you can use to store your Backbone collections offline with only a few
lines of really simple code. The is a [Backbone example](https://github.com/mozilla/localForage/blob/master/examples/backbone-example.html) available if you're
interested in using Backbone and localForage together.
You can set database information, by giving the `window.localForageConfig`
variable a hash of options. Available options are `name`, `storeName`,
`version`, and `description`.
Of course, Backbone.js is entirely optional and you can use localForage
without it.
Example:
```javascript
window.localForageConfig = {
name : 'myApp',
version : 1.0,
storeName : 'keyvaluepairs',
description : 'some description'
};
```
## Framework Support
If you use a framework listed, there's a localForage storage driver for the
models in your framework so you can store data offline with localForage. We
have drivers for the following frameworks:
* [AngularJS](https://github.com/ocombe/angular-localForage)
* [Backbone](https://github.com/mozilla/localForage-backbone)
If you have a driver you'd like listed, please
[open an issue](https://github.com/mozilla/localForage/issues/new) to have it
added to this list.
# Running Tests

@@ -190,8 +209,2 @@

### Will you add (or accept) support for storage in X framework?
**Yes**. If you have an adapter for EmberJS, Angular, whatever, please add it,
along with tests, and submit a pull request. The more frameworks this library
can support, the better.
### Will you add support for node.js?

@@ -198,0 +211,0 @@

@@ -6,7 +6,9 @@ (function() {

var DBNAME = 'localforage';
var DBVERSION = 1;
var STORENAME = 'keyvaluepairs';
var Promise = window.Promise;
var db = null;
var dbInfo = {
name: 'localforage',
storeName: 'keyvaluepairs',
version: 1
};

@@ -23,5 +25,15 @@ // Initialize IndexedDB; fall back to vendor-prefixed versions if needed.

function _initStorage() {
// Open the IndexedDB database (automatically creates one if one didn't
// previously exist), using any options set in window.localForageConfig.
function _initStorage(options) {
if (options) {
for (var i in dbInfo) {
if (options[i] !== undefined) {
dbInfo[i] = options[i];
}
}
}
return new Promise(function(resolve, reject) {
var openreq = indexedDB.open(DBNAME, DBVERSION);
var openreq = indexedDB.open(dbInfo.name, dbInfo.version);
openreq.onerror = function withStoreOnError() {

@@ -32,7 +44,6 @@ reject(openreq.error.name);

// First time setup: create an empty object store
openreq.result.createObjectStore(STORENAME);
openreq.result.createObjectStore(dbInfo.storeName);
};
openreq.onsuccess = function withStoreOnSuccess() {
db = openreq.result;
resolve();

@@ -46,4 +57,3 @@ };

localforage.ready().then(function() {
var store = db.transaction(STORENAME, 'readonly').objectStore(STORENAME);
var store = db.transaction(dbInfo.storeName, 'readonly').objectStore(dbInfo.storeName);
var req = store.get(key);

@@ -55,3 +65,2 @@ req.onsuccess = function getItemOnSuccess() {

}
if (callback) {

@@ -73,3 +82,3 @@ callback(value);

localforage.ready().then(function() {
var store = db.transaction(STORENAME, 'readwrite').objectStore(STORENAME);
var store = db.transaction(dbInfo.storeName, 'readwrite').objectStore(dbInfo.storeName);

@@ -103,3 +112,3 @@ // Cast to undefined so the value passed to callback/promise is

localforage.ready().then(function() {
var store = db.transaction(STORENAME, 'readwrite').objectStore(STORENAME);
var store = db.transaction(dbInfo.storeName, 'readwrite').objectStore(dbInfo.storeName);

@@ -120,3 +129,2 @@ // We use `['delete']` instead of `.delete` because IE 8 will

}
resolve();

@@ -134,4 +142,3 @@ };

localforage.ready().then(function() {
var store = db.transaction(STORENAME, 'readwrite').objectStore(STORENAME);
var store = db.transaction(dbInfo.storeName, 'readwrite').objectStore(dbInfo.storeName);
var req = store.clear();

@@ -155,4 +162,3 @@ req.onsuccess = function clearOnSuccess() {

localforage.ready().then(function() {
var store = db.transaction(STORENAME, 'readonly').objectStore(STORENAME);
var store = db.transaction(dbInfo.storeName, 'readonly').objectStore(dbInfo.storeName);
var req = store.count();

@@ -186,3 +192,3 @@ req.onsuccess = function lengthOnSuccess() {

localforage.ready().then(function() {
var store = db.transaction(STORENAME, 'readonly').objectStore(STORENAME);
var store = db.transaction(dbInfo.storeName, 'readonly').objectStore(dbInfo.storeName);

@@ -189,0 +195,0 @@ var advanced = false;

@@ -8,2 +8,6 @@ // If IndexedDB isn't available, we'll fall back to localStorage.

var keyPrefix = '';
var dbInfo = {
name: 'localforage'
};
var Promise = window.Promise;

@@ -25,3 +29,15 @@ var localStorage = null;

function _initStorage() {
// Config the localStorage backend, using options set in
// window.localForageConfig.
function _initStorage(options) {
if (options) {
for (var i in dbInfo) {
if (options[i] !== undefined) {
dbInfo[i] = options[i];
}
}
}
keyPrefix = dbInfo.name + '/';
return Promise.resolve();

@@ -53,3 +69,3 @@ }

try {
var result = localStorage.getItem(key);
var result = localStorage.getItem(keyPrefix + key);

@@ -81,6 +97,10 @@ // If a result was found, parse it from serialized JSON into a

// Remove the prefix from the key, if a key is found.
if (result) {
result = result.substring(keyPrefix.length);
}
if (callback) {
callback(result);
}
resolve(result);

@@ -110,3 +130,3 @@ });

localforage.ready().then(function() {
localStorage.removeItem(key);
localStorage.removeItem(keyPrefix + key);

@@ -144,3 +164,3 @@ if (callback) {

localStorage.setItem(key, value);
localStorage.setItem(keyPrefix + key, value);

@@ -147,0 +167,0 @@ if (callback) {

(function() {
'use strict';
var DB_NAME = 'localforage';
// Default DB size is _JUST UNDER_ 5MB, as it's the highest size we can use

@@ -10,8 +9,12 @@ // without a prompt.

var DB_SIZE = 4980736;
var DB_VERSION = '1.0';
var SERIALIZED_MARKER = '__lfsc__:';
var SERIALIZED_MARKER_LENGTH = SERIALIZED_MARKER.length;
var STORE_NAME = 'keyvaluepairs';
var Promise = window.Promise;
var db = null;
var dbInfo = {
description: '',
name: 'localforage',
storeName: 'keyvaluepairs',
version: '1.0'
};

@@ -23,14 +26,22 @@ // If WebSQL methods aren't available, we can stop now.

function _initStorage() {
// Open the WebSQL database (automatically creates one if one didn't
// previously exist), using any options set in window.localForageConfig.
function _initStorage(options) {
if (options) {
for (var i in dbInfo) {
if (options[i] !== undefined) {
dbInfo[i] = typeof(options[i]) !== 'string' ? options[i].toString() : options[i];
}
}
}
return new Promise(function(resolve, reject) {
// Open the database; the openDatabase API will automatically create it for
// us if it doesn't exist.
db = window.openDatabase(DB_NAME, DB_VERSION, STORE_NAME, DB_SIZE);
// Open the database; the openDatabase API will automatically
// create it for us if it doesn't exist.
db = window.openDatabase(dbInfo.name, dbInfo.version,
dbInfo.description, DB_SIZE);
// Create our key/value table if it doesn't exist.
// TODO: Technically I can imagine this being as race condition, as I'm not
// positive on the WebSQL API enough to be sure that other transactions
// won't be run before this? But I assume not.
db.transaction(function (t) {
t.executeSql('CREATE TABLE IF NOT EXISTS localforage (id INTEGER PRIMARY KEY, key unique, value)', [], function(t, results) {
t.executeSql('CREATE TABLE IF NOT EXISTS ' + dbInfo.storeName + ' (id INTEGER PRIMARY KEY, key unique, value)', [], function() {
resolve();

@@ -46,3 +57,3 @@ }, null);

db.transaction(function (t) {
t.executeSql('SELECT * FROM localforage WHERE key = ? LIMIT 1', [key], function (t, results) {
t.executeSql('SELECT * FROM ' + dbInfo.storeName + ' WHERE key = ? LIMIT 1', [key], function (t, results) {
var result = results.rows.length ? results.rows.item(0).value : null;

@@ -95,3 +106,3 @@

db.transaction(function (t) {
t.executeSql('INSERT OR REPLACE INTO localforage (key, value) VALUES (?, ?)', [key, valueToSave], function() {
t.executeSql('INSERT OR REPLACE INTO ' + dbInfo.storeName + ' (key, value) VALUES (?, ?)', [key, valueToSave], function() {
if (callback) {

@@ -112,3 +123,3 @@ callback(value);

db.transaction(function (t) {
t.executeSql('DELETE FROM localforage WHERE key = ?', [key], function() {
t.executeSql('DELETE FROM ' + dbInfo.storeName + ' WHERE key = ?', [key], function() {
if (callback) {

@@ -131,3 +142,3 @@ callback();

db.transaction(function (t) {
t.executeSql('DELETE FROM localforage', [], function(t, results) {
t.executeSql('DELETE FROM ' + dbInfo.storeName, [], function(t, results) {
if (callback) {

@@ -151,3 +162,3 @@ callback();

// Ahhh, SQL makes this one soooooo easy.
t.executeSql('SELECT COUNT(key) as c FROM localforage', [], function (t, results) {
t.executeSql('SELECT COUNT(key) as c FROM ' + dbInfo.storeName, [], function (t, results) {
var result = results.rows.item(0).c;

@@ -177,3 +188,3 @@

db.transaction(function (t) {
t.executeSql('SELECT key FROM localforage WHERE id = ? LIMIT 1', [n + 1], function (t, results) {
t.executeSql('SELECT key FROM ' + dbInfo.storeName + ' WHERE id = ? LIMIT 1', [n + 1], function (t, results) {
var result = results.rows.length ? results.rows.item(0).key : null;

@@ -180,0 +191,0 @@

@@ -62,3 +62,3 @@ (function() {

localForage._initStorage().then(function() {
localForage._initStorage(window.localForageConfig).then(function() {
if (callback) {

@@ -86,3 +86,3 @@ callback(localForage);

localForage._initStorage().then(function() {
localForage._initStorage(window.localForageConfig).then(function() {
if (callback) {

@@ -97,3 +97,3 @@ callback(localForage);

localForage._initStorage().then(function() {
localForage._initStorage(window.localForageConfig).then(function() {
if (callback) {

@@ -100,0 +100,0 @@ callback(localForage);

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc