1 | 'use strict';
|
2 |
|
3 | var lodash = require('lodash');
|
4 | var isPromise = require('is-promise');
|
5 |
|
6 | module.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 |
|
12 | var _ = lodash.runInContext();
|
13 | var db = _.chain({});
|
14 |
|
15 |
|
16 |
|
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 |
|
28 |
|
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 |