blob: a29f76d4ca6637fce0439655e46cc6a6b38e5ee8 [file] [log] [blame]
import { generateErrorFromResponse } from 'pouchdb-errors';
import { Headers } from 'pouchdb-fetch';
import massageCreateIndexRequest from '../../massageCreateIndexRequest';
function dbFetch(db, path, opts, callback) {
var status, ok;
opts.headers = new Headers({'Content-type': 'application/json'});
db.fetch(path, opts).then(function (response) {
status = response.status;
ok = response.ok;
return response.json();
}).then(function (json) {
if (!ok) {
json.status = status;
var err = generateErrorFromResponse(json);
callback(err);
} else {
callback(null, json);
}
}).catch(callback);
}
function createIndex(db, requestDef, callback) {
requestDef = massageCreateIndexRequest(requestDef);
dbFetch(db, '_index', {
method: 'POST',
body: JSON.stringify(requestDef)
}, callback);
}
function find(db, requestDef, callback) {
dbFetch(db, '_find', {
method: 'POST',
body: JSON.stringify(requestDef)
}, callback);
}
function explain(db, requestDef, callback) {
dbFetch(db, '_explain', {
method: 'POST',
body: JSON.stringify(requestDef)
}, callback);
}
function getIndexes(db, callback) {
dbFetch(db, '_index', {
method: 'GET'
}, callback);
}
function deleteIndex(db, indexDef, callback) {
var ddoc = indexDef.ddoc;
var type = indexDef.type || 'json';
var name = indexDef.name;
if (!ddoc) {
return callback(new Error('you must provide an index\'s ddoc'));
}
if (!name) {
return callback(new Error('you must provide an index\'s name'));
}
var url = '_index/' + [ddoc, type, name].map(encodeURIComponent).join('/');
dbFetch(db, url, {method: 'DELETE'}, callback);
}
export {
createIndex,
find,
getIndexes,
deleteIndex,
explain
};