| import PouchDB from './constructor'; |
| import { guardedConsole, hasLocalStorage } from 'pouchdb-utils'; |
| |
| function parseAdapter(name, opts) { |
| var match = name.match(/([a-z-]*):\/\/(.*)/); |
| if (match) { |
| // the http adapter expects the fully qualified name |
| return { |
| name: /https?/.test(match[1]) ? match[1] + '://' + match[2] : match[2], |
| adapter: match[1] |
| }; |
| } |
| |
| var adapters = PouchDB.adapters; |
| var preferredAdapters = PouchDB.preferredAdapters; |
| var prefix = PouchDB.prefix; |
| var adapterName = opts.adapter; |
| |
| if (!adapterName) { // automatically determine adapter |
| for (var i = 0; i < preferredAdapters.length; ++i) { |
| adapterName = preferredAdapters[i]; |
| // check for browsers that have been upgraded from websql-only to websql+idb |
| /* istanbul ignore if */ |
| if (adapterName === 'idb' && 'websql' in adapters && |
| hasLocalStorage() && localStorage['_pouch__websqldb_' + prefix + name]) { |
| // log it, because this can be confusing during development |
| guardedConsole('log', 'PouchDB is downgrading "' + name + '" to WebSQL to' + |
| ' avoid data loss, because it was already opened with WebSQL.'); |
| continue; // keep using websql to avoid user data loss |
| } |
| break; |
| } |
| } |
| |
| var adapter = adapters[adapterName]; |
| |
| // if adapter is invalid, then an error will be thrown later |
| var usePrefix = (adapter && 'use_prefix' in adapter) ? |
| adapter.use_prefix : true; |
| |
| return { |
| name: usePrefix ? (prefix + name) : name, |
| adapter: adapterName |
| }; |
| } |
| |
| export default parseAdapter; |