diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2b17b2e..76e8d57 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -60,7 +60,6 @@ The default provider is `Memory`, and you can switch it like so: * tests/index.html?filer-provider=memory * tests/index.html?filer-provider=indexeddb -* tests/index.html?filer-provider=websql If you're writing tests, make sure you write them in the same style as existing tests, which are provider agnostic. See [`tests/lib/test-utils.js`](tests/lib/test-utils.js) and how it gets used diff --git a/README.md b/README.md index fb00fe0..3d225a2 100644 --- a/README.md +++ b/README.md @@ -4,23 +4,23 @@ ### Filer -Filer is a POSIX-like file system for browsers. +Filer is a drop-in replacement for node's `fs` module, a POSIX-like file system +for browsers. ### Compatibility -Filer is known to work in the following browsers/versions, with the specified [Storage Providers](#providers): +Filer uses [IndexedDB](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API) +and is [known to work in the following browsers/versions](https://caniuse.com/#feat=indexeddb): * node.js: v0.10.*+ -* IE: 10+ (IndexedDB) -* Firefox: 26+ (IndexedDB) -* Chrome: 31+ (IndexedDB, WebSQL) -* Safari: 7.0+ (WebSQL) -* Opera: 19+ (IndexedDB, WebSQL) -* iOS: 3.2+ (WebSQL) -* Android Browser: 2.1-4.4 (WebSQL), 4.4+ (IndexedDB) - -NOTE: if you're interested in maximum compatibility, use the `Fallback` provider instead of `Default`. -See the section on [Storage Providers](#providers). +* IE: 10+ +* Edge: 12+ +* Firefox: 10+ +* Chrome: 23+ +* Safari: 10+ +* Opera: 15+ +* iOS: 10+ +* Android Browser: 4.4+ ### Contributing @@ -31,7 +31,7 @@ Want to join the fun? We'd love to have you! See [CONTRIBUTING](https://github.c Filer can be obtained in a number of ways: 1. Via npm: `npm install filer` -3. Via unpkg: `` or specify a version directly, for example: [https://unpkg.com/filer@1.0.1/dist/filer.min.js](https://unpkg.com/filer@1.0.1/dist/filer.min.js) +1. Via unpkg: `` or specify a version directly, for example: [https://unpkg.com/filer@1.0.1/dist/filer.min.js](https://unpkg.com/filer@1.0.1/dist/filer.min.js) ### Loading and Usage @@ -76,11 +76,11 @@ they are invoked. Ensure proper ordering by chaining operations in callbacks. To create a new file system or open an existing one, create a new `FileSystem` instance. By default, a new [IndexedDB](https://developer.mozilla.org/en/docs/IndexedDB) database is created for each file system. The file system can also use other -backend storage providers, for example [WebSQL](http://en.wikipedia.org/wiki/Web_SQL_Database) -or even RAM (i.e., for temporary storage). See the section on [Storage Providers](#providers). +backend storage providers, for example `Memory`. See the section on [Storage Providers](#providers). + -```javascript +```js var fs = new Filer.FileSystem(); fs.open('/myfile', 'w+', function(err, fd) { if (err) throw err; @@ -162,15 +162,17 @@ it becomes ready. #### Filer.FileSystem.providers - Storage Providers -Filer can be configured to use a number of different storage providers. The provider object encapsulates all aspects -of data access, making it possible to swap in different backend storage options. There are currently 4 different -providers to choose from: +Filer can be configured to use a number of different storage providers. The provider object encapsulates all aspects of data access, making it possible to swap in different backend storage options. There are currently 2 providers to choose from: * `FileSystem.providers.IndexedDB()` - uses IndexedDB -* `FileSystem.providers.WebSQL()` - uses WebSQL -* `FileSystem.providers.Fallback()` - attempts to use IndexedDB if possible, falling-back to WebSQL if necessary +if necessary * `FileSystem.providers.Memory()` - uses memory (not suitable for data that needs to survive the current session) +**NOTE**: previous versions of Filer also supported `FileSystem.providers.WebSQL()` and +`FileSystem.providers.Fallback()`, which could be used in browsers that supported +WebSQL but not IndexedDB. [WebSQL has been deprecated](https://www.w3.org/TR/webdatabase/), +and this functionality was removed in `v1.0.0`. If for some reason you still need it, use [`v0.0.44`](https://github.com/filerjs/filer/releases/tag/v0.0.44). + You can choose your provider when creating a `FileSystem`: ```javascript @@ -180,28 +182,20 @@ var providers = FileSystem.providers; // Example 1: Use the default provider (currently IndexedDB) var fs1 = new FileSystem(); -// Example 2: Explicitly use IndexedDB -var fs2 = new FileSystem({ provider: new providers.IndexedDB() }); - -// Example 3: Use one of IndexedDB or WebSQL, whichever is supported -var fs3 = new FileSystem({ provider: new providers.Fallback() }); +// Example 2: Use the Memory provider +var fs2 = new FileSystem({ provider: new providers.Memory() }); ``` Every provider has an `isSupported()` method, which returns `true` if the browser supports this provider: ```javascript -if( Filer.FileSystem.providers.WebSQL.isSupported() ) { - // WebSQL provider will work in current environment... +if( Filer.FileSystem.providers.IndexedDB.isSupported() ) { + // IndexedDB provider will work in current environment... } ``` You can also write your own provider if you need a different backend. See the code in `src/providers` for details. -A number of other providers have been written, including: - -* node.js fs provider: https://github.com/humphd/filer-fs -* node.js Amazon S3 provider: https://github.com/alicoding/filer-s3 - #### Filer.Buffer When reading and writing data, Filer follows node.js and uses [`Buffer`](http://nodejs.org/api/buffer.html). diff --git a/package-lock.json b/package-lock.json index 9b4a0d5..03d480b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1402,7 +1402,7 @@ }, "util": { "version": "0.10.3", - "resolved": "http://registry.npmjs.org/util/-/util-0.10.3.tgz", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, "requires": { @@ -2453,7 +2453,8 @@ "base64-arraybuffer": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "dev": true }, "base64-js": { "version": "1.3.0", @@ -2635,7 +2636,7 @@ }, "browserify-aes": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { @@ -2672,7 +2673,7 @@ }, "browserify-rsa": { "version": "4.0.1", - "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { @@ -3389,7 +3390,7 @@ }, "concat-stream": { "version": "1.6.2", - "resolved": "http://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { @@ -3819,7 +3820,7 @@ }, "create-hash": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { @@ -3832,7 +3833,7 @@ }, "create-hmac": { "version": "1.1.7", - "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { @@ -4307,7 +4308,7 @@ }, "diffie-hellman": { "version": "5.0.3", - "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { @@ -7095,7 +7096,7 @@ }, "is-accessor-descriptor": { "version": "0.1.6", - "resolved": "http://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { @@ -7174,7 +7175,7 @@ }, "is-data-descriptor": { "version": "0.1.4", - "resolved": "http://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { @@ -7976,7 +7977,7 @@ }, "media-typer": { "version": "0.3.0", - "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, @@ -9880,7 +9881,7 @@ }, "os-homedir": { "version": "1.0.2", - "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true }, @@ -9896,7 +9897,7 @@ }, "os-tmpdir": { "version": "1.0.2", - "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, @@ -10005,7 +10006,7 @@ }, "pako": { "version": "0.2.9", - "resolved": "http://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", "dev": true }, @@ -10086,7 +10087,7 @@ }, "parse-asn1": { "version": "5.1.1", - "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", "dev": true, "requires": { @@ -10151,7 +10152,7 @@ }, "path-browserify": { "version": "0.0.0", - "resolved": "http://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", "dev": true }, @@ -10235,7 +10236,7 @@ }, "pify": { "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, @@ -11343,7 +11344,7 @@ }, "readable-stream": { "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { @@ -11802,7 +11803,7 @@ }, "safe-regex": { "version": "1.1.0", - "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { @@ -11948,7 +11949,7 @@ }, "sha.js": { "version": "2.4.11", - "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { @@ -12322,7 +12323,7 @@ }, "sprintf-js": { "version": "1.0.3", - "resolved": "http://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, @@ -12392,7 +12393,7 @@ }, "stream-browserify": { "version": "2.0.1", - "resolved": "http://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "dev": true, "requires": { @@ -12443,7 +12444,7 @@ }, "string_decoder": { "version": "1.1.1", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { @@ -12644,7 +12645,7 @@ }, "through": { "version": "2.3.8", - "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, @@ -12780,7 +12781,7 @@ }, "tty-browserify": { "version": "0.0.0", - "resolved": "http://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", "dev": true }, @@ -13198,7 +13199,7 @@ }, "vm-browserify": { "version": "0.0.4", - "resolved": "http://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", "dev": true, "requires": { diff --git a/package.json b/package.json index 05df013..f688051 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,6 @@ "url": "https://github.com/filerjs/filer.git" }, "dependencies": { - "base64-arraybuffer": "^0.1.5", "es6-promisify": "^6.0.1", "minimatch": "^3.0.4" }, diff --git a/src/providers/index.js b/src/providers/index.js index d52d5f0..a05b42e 100644 --- a/src/providers/index.js +++ b/src/providers/index.js @@ -1,35 +1,8 @@ -var IndexedDB = require('./indexeddb.js'); -var WebSQL = require('./websql.js'); -var Memory = require('./memory.js'); +const IndexedDB = require('./indexeddb.js'); +const Memory = require('./memory.js'); module.exports = { IndexedDB: IndexedDB, - WebSQL: WebSQL, - Memory: Memory, - - /** - * Convenience Provider references - */ - - // The default provider to use when none is specified Default: IndexedDB, - - // The Fallback provider does automatic fallback checks - Fallback: (function() { - if(IndexedDB.isSupported()) { - return IndexedDB; - } - - if(WebSQL.isSupported()) { - return WebSQL; - } - - function NotSupported() { - throw '[Filer Error] Your browser doesn\'t support IndexedDB or WebSQL.'; - } - NotSupported.isSupported = function() { - return false; - }; - return NotSupported; - }()) + Memory: Memory }; diff --git a/src/providers/websql.js b/src/providers/websql.js deleted file mode 100644 index 0a73bdb..0000000 --- a/src/providers/websql.js +++ /dev/null @@ -1,170 +0,0 @@ -var FILE_SYSTEM_NAME = require('../constants.js').FILE_SYSTEM_NAME; -var FILE_STORE_NAME = require('../constants.js').FILE_STORE_NAME; -var WSQL_VERSION = require('../constants.js').WSQL_VERSION; -var WSQL_SIZE = require('../constants.js').WSQL_SIZE; -var WSQL_DESC = require('../constants.js').WSQL_DESC; -var Errors = require('../errors.js'); -var base64ArrayBuffer = require('base64-arraybuffer'); - -function WebSQLContext(db, isReadOnly) { - var that = this; - this.getTransaction = function(callback) { - if(that.transaction) { - callback(that.transaction); - return; - } - // Either do readTransaction() (read-only) or transaction() (read/write) - db[isReadOnly ? 'readTransaction' : 'transaction'](function(transaction) { - that.transaction = transaction; - callback(transaction); - }); - }; -} - -WebSQLContext.prototype.clear = function(callback) { - function onError(transaction, error) { - callback(error); - } - function onSuccess() { - callback(null); - } - this.getTransaction(function(transaction) { - transaction.executeSql('DELETE FROM ' + FILE_STORE_NAME + ';', - [], onSuccess, onError); - }); -}; - -function _get(getTransaction, key, callback) { - function onSuccess(transaction, result) { - // If the key isn't found, return null - var value = result.rows.length === 0 ? null : result.rows.item(0).data; - callback(null, value); - } - function onError(transaction, error) { - callback(error); - } - getTransaction(function(transaction) { - transaction.executeSql('SELECT data FROM ' + FILE_STORE_NAME + ' WHERE id = ? LIMIT 1;', - [key], onSuccess, onError); - }); -} -WebSQLContext.prototype.getObject = function(key, callback) { - _get(this.getTransaction, key, function(err, result) { - if(err) { - return callback(err); - } - - try { - if(result) { - result = JSON.parse(result); - } - } catch(e) { - return callback(e); - } - - callback(null, result); - }); -}; -WebSQLContext.prototype.getBuffer = function(key, callback) { - _get(this.getTransaction, key, function(err, result) { - if(err) { - return callback(err); - } - - // Deal with zero-length ArrayBuffers, which will be encoded as '' - if(result || result === '') { - var arrayBuffer = base64ArrayBuffer.decode(result); - result = Buffer.from(arrayBuffer); - } - - callback(null, result); - }); -}; - -function _put(getTransaction, key, value, callback) { - function onSuccess() { - callback(null); - } - function onError(transaction, error) { - callback(error); - } - getTransaction(function(transaction) { - transaction.executeSql('INSERT OR REPLACE INTO ' + FILE_STORE_NAME + ' (id, data) VALUES (?, ?);', - [key, value], onSuccess, onError); - }); -} -WebSQLContext.prototype.putObject = function(key, value, callback) { - var json = JSON.stringify(value); - _put(this.getTransaction, key, json, callback); -}; -WebSQLContext.prototype.putBuffer = function(key, uint8BackedBuffer, callback) { - var base64 = base64ArrayBuffer.encode(uint8BackedBuffer.buffer); - _put(this.getTransaction, key, base64, callback); -}; - -WebSQLContext.prototype.delete = function(key, callback) { - function onSuccess() { - callback(null); - } - function onError(transaction, error) { - callback(error); - } - this.getTransaction(function(transaction) { - transaction.executeSql('DELETE FROM ' + FILE_STORE_NAME + ' WHERE id = ?;', - [key], onSuccess, onError); - }); -}; - - -function WebSQL(name) { - this.name = name || FILE_SYSTEM_NAME; - this.db = null; -} -WebSQL.isSupported = function() { - return !!global.openDatabase; -}; - -WebSQL.prototype.open = function(callback) { - var that = this; - - // Bail if we already have a db open - if(that.db) { - return callback(); - } - - var db = global.openDatabase(that.name, WSQL_VERSION, WSQL_DESC, WSQL_SIZE); - if(!db) { - callback('[WebSQL] Unable to open database.'); - return; - } - - function onError(transaction, error) { - if (error.code === 5) { - callback(new Errors.EINVAL('WebSQL cannot be accessed. If private browsing is enabled, disable it.')); - } - callback(error); - } - function onSuccess() { - that.db = db; - callback(); - } - - // Create the table and index we'll need to store the fs data. - db.transaction(function(transaction) { - function createIndex(transaction) { - transaction.executeSql('CREATE INDEX IF NOT EXISTS idx_' + FILE_STORE_NAME + '_id' + - ' on ' + FILE_STORE_NAME + ' (id);', - [], onSuccess, onError); - } - transaction.executeSql('CREATE TABLE IF NOT EXISTS ' + FILE_STORE_NAME + ' (id unique, data TEXT);', - [], createIndex, onError); - }); -}; -WebSQL.prototype.getReadOnlyContext = function() { - return new WebSQLContext(this.db, true); -}; -WebSQL.prototype.getReadWriteContext = function() { - return new WebSQLContext(this.db, false); -}; - -module.exports = WebSQL; diff --git a/tests/index.js b/tests/index.js index f864a3d..2402fd3 100644 --- a/tests/index.js +++ b/tests/index.js @@ -52,7 +52,6 @@ require('./spec/fs.copyFile.spec'); // Filer.FileSystem.providers.* require('./spec/providers/providers.spec'); require('./spec/providers/providers.indexeddb.spec'); -require('./spec/providers/providers.websql.spec'); require('./spec/providers/providers.memory.spec'); require('./spec/providers/serializable-memory-provider.spec'); diff --git a/tests/lib/test-utils.js b/tests/lib/test-utils.js index 8b8f904..e3c2c81 100644 --- a/tests/lib/test-utils.js +++ b/tests/lib/test-utils.js @@ -1,6 +1,5 @@ var Filer = require('../../src'); var IndexedDBTestProvider = require('./indexeddb.js'); -var WebSQLTestProvider = require('./websql.js'); var MemoryTestProvider = require('./memory.js'); var Url = require('url'); @@ -16,13 +15,8 @@ function uniqueName() { function findBestProvider() { var providers = Filer.FileSystem.providers; - if(providers.IndexedDB.isSupported()) { - return IndexedDBTestProvider; - } - if(providers.WebSQL.isSupported()) { - return WebSQLTestProvider; - } - return MemoryTestProvider; + return providers.IndexedDB.isSupported() ? + IndexedDBTestProvider : MemoryTestProvider; } function getUrlParams() { @@ -61,9 +55,6 @@ function setup(callback) { case 'indexeddb': _provider = new IndexedDBTestProvider(name); break; - case 'websql': - _provider = new WebSQLTestProvider(name); - break; case 'memory': _provider = new MemoryTestProvider(name); break; @@ -158,7 +149,6 @@ module.exports = { provider: provider, providers: { IndexedDB: IndexedDBTestProvider, - WebSQL: WebSQLTestProvider, Memory: MemoryTestProvider }, cleanup: cleanup, diff --git a/tests/lib/websql.js b/tests/lib/websql.js deleted file mode 100644 index 7dc3486..0000000 --- a/tests/lib/websql.js +++ /dev/null @@ -1,49 +0,0 @@ -var Filer = require('../../src'); - -var needsCleanup = []; -if(global.addEventListener) { - global.addEventListener('beforeunload', function() { - needsCleanup.forEach(function(f) { f(); }); - }); -} - -function WebSQLTestProvider(name) { - var _done = false; - var that = this; - - function cleanup(callback) { - callback = callback || function(){}; - - if(!that.provider || _done) { - return callback(); - } - - // Provider is there, but db was never touched - if(!that.provider.db) { - return callback(); - } - - var context = that.provider.getReadWriteContext(); - context.clear(function() { - that.provider = null; - _done = true; - callback(); - }); - } - - function init() { - if(that.provider) { - return; - } - that.provider = new Filer.FileSystem.providers.WebSQL(name); - needsCleanup.push(cleanup); - } - - this.init = init; - this.cleanup = cleanup; -} -WebSQLTestProvider.isSupported = function() { - return Filer.FileSystem.providers.WebSQL.isSupported(); -}; - -module.exports = WebSQLTestProvider; diff --git a/tests/spec/providers/providers.spec.js b/tests/spec/providers/providers.spec.js index d8c45d6..a5c9fc5 100644 --- a/tests/spec/providers/providers.spec.js +++ b/tests/spec/providers/providers.spec.js @@ -10,10 +10,6 @@ describe('Filer.FileSystem.providers', function() { expect(Filer.FileSystem.providers.IndexedDB).to.be.a('function'); }); - it('has WebSQL constructor', function() { - expect(Filer.FileSystem.providers.WebSQL).to.be.a('function'); - }); - it('has Memory constructor', function() { expect(Filer.FileSystem.providers.Memory).to.be.a('function'); }); @@ -21,8 +17,4 @@ describe('Filer.FileSystem.providers', function() { it('has a Default constructor', function() { expect(Filer.FileSystem.providers.Default).to.be.a('function'); }); - - it('has Fallback constructor', function() { - expect(Filer.FileSystem.providers.Fallback).to.be.a('function'); - }); }); diff --git a/tests/spec/providers/providers.websql.spec.js b/tests/spec/providers/providers.websql.spec.js deleted file mode 100644 index a1324f4..0000000 --- a/tests/spec/providers/providers.websql.spec.js +++ /dev/null @@ -1,4 +0,0 @@ -var util = require('../../lib/test-utils.js'); -var providerBase = require('./providers.base.js'); - -providerBase('WebSQL', util.providers.WebSQL);