UNPKG

1.14 kBJavaScriptView Raw
1'use strict';
2
3var lodash = require('lodash');
4var isPromise = require('is-promise');
5
6module.exports = function (adapter) {
7 if (typeof adapter !== 'object') {
8 throw new Error('An adapter must be provided, see https://github.com/typicode/lowdb/#usage');
9 }
10
11 // Create a fresh copy of lodash
12 var _ = lodash.runInContext();
13 var db = _.chain({});
14
15 // Add write function to lodash
16 // Calls save before returning result
17 _.prototype.write = _.wrap(_.prototype.value, function (func) {
18 var funcRes = func.apply(this);
19 return db.write(funcRes);
20 });
21
22 function plant(state) {
23 db.__wrapped__ = state;
24 return db;
25 }
26
27 // Lowdb API
28 // Expose _ for mixins
29 db._ = _;
30
31 db.read = function () {
32 var r = adapter.read();
33 return isPromise(r) ? r.then(plant) : plant(r);
34 };
35
36 db.write = function (returnValue) {
37 var w = adapter.write(db.getState());
38 return isPromise(w) ? w.then(function () {
39 return returnValue;
40 }) : returnValue;
41 };
42
43 db.getState = function () {
44 return db.__wrapped__;
45 };
46
47 db.setState = function (state) {
48 return plant(state);
49 };
50
51 return db.read();
52};
\No newline at end of file