|
|
|
/**
|
|
|
|
* Way data is stored for this database
|
|
|
|
* For a Node.js/Node Webkit database it's the file system
|
|
|
|
* For a browser-side database it's localforage, which uses the best backend available (IndexedDB then WebSQL then localStorage)
|
|
|
|
*
|
|
|
|
* This version is the browser version
|
|
|
|
*/
|
|
|
|
|
|
|
|
var localforage = require('localforage')
|
|
|
|
|
|
|
|
// Configure localforage to display NeDB name for now. Would be a good idea to let user use his own app name
|
|
|
|
localforage.config({
|
|
|
|
name: 'NeDB'
|
|
|
|
, storeName: 'nedbdata'
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
function exists (filename, callback) {
|
|
|
|
localforage.getItem(filename, function (err, value) {
|
|
|
|
if (value !== null) { // Even if value is undefined, localforage returns null
|
|
|
|
return callback(true);
|
|
|
|
} else {
|
|
|
|
return callback(false);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function rename (filename, newFilename, callback) {
|
|
|
|
localforage.getItem(filename, function (err, value) {
|
|
|
|
if (value === null) {
|
|
|
|
localforage.removeItem(newFilename, function () { return callback(); });
|
|
|
|
} else {
|
|
|
|
localforage.setItem(newFilename, value, function () {
|
|
|
|
localforage.removeItem(filename, function () { return callback(); });
|
|
|
|
});
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function writeFile (filename, contents, options, callback) {
|
|
|
|
// Options do not matter in browser setup
|
|
|
|
if (typeof options === 'function') { callback = options; }
|
|
|
|
localforage.setItem(filename, contents, function () { return callback(); });
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function appendFile (filename, toAppend, options, callback) {
|
|
|
|
// Options do not matter in browser setup
|
|
|
|
if (typeof options === 'function') { callback = options; }
|
|
|
|
|
|
|
|
localforage.getItem(filename, function (err, contents) {
|
|
|
|
contents = contents || '';
|
|
|
|
contents += toAppend;
|
|
|
|
localforage.setItem(filename, contents, function () { return callback(); });
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function readFile (filename, options, callback) {
|
|
|
|
// Options do not matter in browser setup
|
|
|
|
if (typeof options === 'function') { callback = options; }
|
|
|
|
localforage.getItem(filename, function (err, contents) { return callback(null, contents || ''); });
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function unlink (filename, callback) {
|
|
|
|
localforage.removeItem(filename, function () { return callback(); });
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Nothing to do, no directories will be used on the browser
|
|
|
|
function mkdirp (dir, callback) {
|
|
|
|
return callback();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Nothing to do, no data corruption possible in the brower
|
|
|
|
function ensureDatafileIntegrity (filename, callback) {
|
|
|
|
return callback(null);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Interface
|
|
|
|
module.exports.exists = exists;
|
|
|
|
module.exports.rename = rename;
|
|
|
|
module.exports.writeFile = writeFile;
|
|
|
|
module.exports.crashSafeWriteFile = writeFile; // No need for a crash safe function in the browser
|
|
|
|
module.exports.appendFile = appendFile;
|
|
|
|
module.exports.readFile = readFile;
|
|
|
|
module.exports.unlink = unlink;
|
|
|
|
module.exports.mkdirp = mkdirp;
|
|
|
|
module.exports.ensureDatafileIntegrity = ensureDatafileIntegrity;
|
|
|
|
|